将 Liquid 模板过滤器绑定到上下文

Sau*_*ord 4 ruby templates ruby-on-rails liquid

我希望能够将 Rails Liquid Template 过滤器绑定到上下文。

例如,假设我有一个名为“asset_url”的过滤器,我想按如下方式使用它:

{{ 'style.css' | 资产网址 }}

我希望 asset_url 过滤器能够在每个用户帐户的基础上查找键“style.css”,如下所示:

https://somewhere.com/users/10/assets/style.css

请注意,我需要检索 user_id=10 的 asset_url。

有没有办法将任意上下文绑定/初始化到 Liquid 过滤器?

谢谢,

小智 5

您可以在过滤器中使用@context变量,特别是@context.registers哈希。

将您的用户传递到寄存器哈希中:

@user = User.first

@template = Liquid::Template.parse("{{ 'style.css' | asset_url }}")
@template.render({}, registers: { user: @user })
Run Code Online (Sandbox Code Playgroud)

在您的过滤器中:

module MyAssetFilter
  def asset_url(value)
    # @context.registers[:user] is available for use here

    if asset = @context.registers[:user].assets.find_by(filename: value)
      asset.filename
      # etc...
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助。