默认情况下,rails会在views/layouts
路径中查找布局视图文件。但是,我想将其更改为app/themes/theme-name/layout.html.erb
以获取特定控制器。为此,我使用以下代码:
class ContentController < ApplicationController
before_filter :set_theme
def set_theme
theme = "default"
prepend_view_path "app/themes/#{theme}" # change default view path
self.class.layout "../../themes/#{theme}/layout" # change default layout path
end
end
但是这段代码引发了以下错误:
Missing template layouts/../../themes/default/layout with {:locale=>[:en], :format .....
它仍然在布局文件夹中查找。我该如何解决这个问题。
答案 0 :(得分:3)
替换此行:
self.class.layout "../../themes/#{theme}/layout"
用这个:
self.class.layout Rails.root+"/themes/#{theme}/layout"
击> <击> 撞击>
默认情况下,Rails会在app/view/layouts
文件夹中查找布局。这是配置使用的路径。要将另一条路径app/themes/theme-name/layouts
添加到视图路径列表中,您需要将其添加到config/application.rb
,如下所示:
class Application < Rails::Application
...
config.paths["app/views"] << "app/themes/theme-name/"
...
end
重启服务器。现在,如果app/themes/theme-name/layouts
文件夹中有一个布局文件“alpha.html.erb”,您可以在控制器中使用它,如下所示:
layout "alpha"
Rails将在配置的路径中查找layouts/alpha.html.erb
。
您可以随时根据自己的需要进行即兴创作。希望它有所帮助。