2013-12-24 3 views
3

Я хотел бы иметь возможность привязать фильтр шаблонов жидких шаблонов Rails к контексту.Bind Liquid Template Filter to the context

Например, скажем, у меня есть фильтр под названием «asset_url», который я хотел бы использовать следующим образом:

{{ «style.css» | asset_url}}

Я хотел бы asset_url фильтр, чтобы иметь возможность для поиска ключей «style.css» на каждом пользователь-счет основы следующим образом:

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

Обратите внимание, что мне нужно, чтобы получить asset_url для user_id = 10.

Есть ли способ привязать/инициализировать произвольный контекст к жидкому фильтру?

Спасибо,

+0

Вы когда-нибудь находили решение этого вопроса? Попытка сделать то же самое себе сегодня утром. – SirRawlins

ответ

3

Вы можете использовать @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 

Я надеюсь, что это помогает.