我正在尝试访问我在应用程序控制器文件中定义的辅助方法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
感谢任何帮助:)
答案 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)