【问题标题】:Bind Liquid Template Filter to a Context将 Liquid 模板过滤器绑定到上下文
【发布时间】:2013-12-24 00:39:14
【问题描述】:

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

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

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

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

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

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

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

谢谢,

【问题讨论】:

  • 您找到解决方案了吗?今天早上我自己也在尝试做同样的事情。

标签: ruby-on-rails ruby templates liquid


【解决方案1】:

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

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

@user = User.first

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

在您的过滤器中:

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

我希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2014-10-20
    • 1970-01-01
    • 2018-05-14
    • 1970-01-01
    • 2011-08-02
    • 2014-10-16
    • 1970-01-01
    • 2014-02-01
    • 1970-01-01
    相关资源
    最近更新 更多