液体将数据传递给过滤器

Liquid pass data to a filter

我有一个包含很多层的应用程序,其中每一层都有自己的液体模板。

现在我正在尝试实现一个过滤器,给定资产名称 returns 其 url,就像 shopify 中的 asset_url

module UrlFilters
  def asset_url(input)
    current_tier.find_asset_by_name(input).url
  end
  # [...]
end

每次调用时将 current_tier 变量传递给过滤器的最简单模式是什么?

使用上下文寄存器哈希。

module UrlFilters
  def asset_url(input)
    @context.registers[:current_tier].find_asset_by_name(input).url
  end
  # [...]
end

template = Liquid::Template.parse(some_template)
template.render({}, filters: [UrlFilters], registers: { current_tier: current_tier })