如何用液体覆盖erb?

我已经使用prepend_view_path向我的应用添加了一个主题目录,如此处所述。 它按预期工作。 我现在可以在app/themes/my_theme/views下的app/themes/my_theme/views添加一个视图结构

现在,我希望能够通过放入.liquid文件来覆盖erb模板,该文件将立即从控制器操作中呈现。

例如,我想覆盖app/views/pages/home.html.erb

 

…使用app/themes/my_theme/views/pages/home.liquid

 

It works with {{ "liquid" }}

我不想指定一个视图路径数组(维护很糟糕),但只需将.liquid作为一个层添加到模板引擎中。 但是,可能有一个无法覆盖的受保护视图的黑名单(例如app/views/admin/*

你有液体模板处理程序吗? 否则Rails将不知道你想用什么做什么.liquid文件。 请参阅此博客文章: http : //royvandermeij.com/blog/2011/09/21/create-a-liquid-handler-for-rails-3-dot-1/

对于你的第二个问题:不使用app/views/admin/*的主题,你应该确保你有一个不是prepend_view_path的AdminController。

根据文档,您可以使用prepend_view_path

将以下内容添加到ApplicationController:

 before_filter :set_theme_path def set_theme_path prepend_view_path "app/themes/#{current_theme}" end 

因此,Rails应该在您的主题特定目录中查找任何视图,而不是app / views / ** / *中的默认视图