ruby - 带有 Jekyll 的 Ruby 数组的液体过滤器

标签 ruby jekyll liquid

我想写一个 Jekyll 过滤器,它接受一个列表作为参数,并返回一个没有冗余元素的列表的字符串。

我的过滤器代码是:

module Jekyll
    module ArrayToSet
        def array_to_set_string(arr)
            arr.uniq.to_s
        end
    end
end

Liquid::Template.register_filter(Jekyll::ArrayToSet)

使用代码为

{{ [1,2,2,3] | array_to_set_string }}

但是编译jekyll build失败了,因为函数中的arr为nul。

当我将输入参数更改为字符串 "[1,2,2,3]" 时,arr 是一个普通字符串。

jekyll 是否禁止过滤器的非字符串参数?

最佳答案

Liquid 不接受这样的 Ruby 代码,但它可以使用通过其他方式(过滤器或标签)创建的 Ruby 对象。

所以要么创建一个创建数组的方法,要么接受字符串并在处理之前将它们转换为数组。

使用两步过程创建数组然后处理的示例:

module Filter
  def to_array(str)
    str.split(',')
  end

  def uniq(arr)
    arr.uniq
  end
end

>> {{ '1,2,2,3' | to_array | uniq }}
1 2 3

当然,您也可以将其全部整合到一个方法中:

module Filter
  def to_array_uniq(str)
    str.split(',').uniq
  end
end

关于ruby - 带有 Jekyll 的 Ruby 数组的液体过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20517746/

相关文章:

jekyll - 我可以链接/连接液体标签作为单衬吗?有分隔符吗?

css - 液体 SCSS 文件中的 if 语句 (Slate/Shopify)

github 页面上的 Jekyll 将除法结果显示为分数

ruby - 与常规方法相比,使用 block 可以获得什么好处?

ruby-on-rails - 我如何消除一些查询?

plugins - 在 Jekyll 插件中调用 "markdownify"

json - 使用 httparty ruby​​gem 发出 api 请求时如何处理分页

ruby - 操作 Ruby 类默认值

ruby-on-rails - 使用AJAX显示错误消息Ruby on Rails

jekyll - 检测 Jekyll 中是否包含文件