我使用 Liquid 作为价格标签的模板语言,用户可以从我的网站下载。
液体单独工作正常,但自定义过滤器无法工作。他们只是什么也没做。
这是一个例子:
$ {{item.primary_offer.subscription.month_price | no_decimal}},- per month
这应该导致:
$ 199,- per month.
但是过滤器不起作用,所以结果是:
$ 199.0,- per month.
我的过滤器文件如下所示:
module LiquidFilters
include ActionView::Helpers::NumberHelper
def no_decimal(input)
number_to_currency(input.to_f, precision: 0)
end
end
Liquid::Template.register_filter(LiquidFilters)
我的应用程序助手呈现液体输入,如下所示:
def liquidize(content, arguments)
Liquid::Template.parse(content).render(arguments, :filters => [LiquidFilters])
end
我通过将 LiquidFilters 模块移动到应用程序帮助程序文件(在 ApplicationHelper 模块下)解决了这个问题。
一切突然都起作用了。
我不明白为什么这会产生影响,但它确实有效。如果有人能解释这一点,我会投票支持他们的答案。 :)
确保文件中有此行
Liquid::Template.register_filter(LiquidFilters)
在您尝试使用过滤器之前已经过评估。您应该在
app/initializers/liquid.rb
中注册过滤器