无法在液体标签定义中获得current_tenant辅助方法

时间:2014-04-09 17:56:50

标签: ruby-on-rails ruby-on-rails-4 helper liquid

我正在尝试访问我在应用程序控制器文件中定义的辅助方法current_tenant,如下所示:

def current_tenant
    @current_tenant ||= User.find_by_alias_domain(request.host)
    @current_tenant ||= User.find_by_subdomain!(request.subdomain) # includes(:home).
end
helper_method :current_tenant

我想从这个班级里面访问它。但是我无法让它发挥作用。

    class GetMenu < Liquid::Tag

        def initialize(tag_name, variables, tokens)

            @variables = variables.split(" ")

            @menu_object = @variables[0]
            @file_name = @variables[1]

            super
        end

        def render(context)
            #@path = Liquid::Template.file_system
            #header_file = @path.root.to_s + "/partials/#{@file_name.strip}.html.liquid"

            #content = File.read(header_file)


            content = current_tenant.theme.code_file.find_by_hierarchy_and_name('snippet', @file_name.to_s).code

            @menu ||= Menu.find_by_slug(@menu_object)

            context.merge('menu' => @menu)

            Liquid::Template.parse(content).render(context)

        end

    end

    Liquid::Template.register_tag('get_menu', GetMenu)

end

感谢任何帮助:)

1 个答案:

答案 0 :(得分:0)

我通过在我的液化方法中将当前租户添加到液体变量中解决了这个问题,如下所示:

Liquid::Template.parse(layout_code).render(model_content.merge('template_content' => templ, 'settings' => current_tenant, 'theme_id' => current_tenant.theme.id), :filters => [LiquidFilters])

重要的部分是:

'settings' => current_tenant, 'theme_id' => current_tenant.theme.id

这两个添加了一个名为settings和theme_id的液体变量,其中包含主题id和current_tenant。

在液体标签定义中,可以在模板文件(液体文件)内或通过context["theme_id"]正常访问这些变量。

完整示例:

class SnippetFile < Liquid::Tag
    class SnippetFile < Liquid::Tag
        # Include the stylesheet tag link helper
        include ActionView::Helpers::AssetTagHelper

        def initialize(tag_name, variables, tokens)
            @variables = variables.split(" ")


            @default_name = @variables[0]
            @file_name = @variables[1]

            super
        end

        def render(context)

            if @file_name.present? && (context[@file_name.strip]).present? 
                content = CodeFile.find_by(hierarchy: 'snippet', name: context[@file_name.strip], theme_id: context["theme_id"])
            else
                content = CodeFile.find_by(hierarchy: 'snippet', name: @default_name, theme_id: context["theme_id"])
            end 

            Liquid::Template.parse(content.code).render(context)

        end


    end

    Liquid::Template.register_tag('snippet_file', SnippetFile)