Fai*_*hid 2 layout ruby-on-rails path
默认情况下,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
Run Code Online (Sandbox Code Playgroud)
但这段代码抛出以下错误:
Missing template layouts/../../themes/default/layout with {:locale=>[:en], :format .....
Run Code Online (Sandbox Code Playgroud)
它仍在查找布局文件夹。我该如何解决这个问题。
替换这一行:
self.class.layout "../../themes/#{theme}/layout"
Run Code Online (Sandbox Code Playgroud)
有了这个:
self.class.layout Rails.root+"/themes/#{theme}/layout"
Run Code Online (Sandbox Code Playgroud)
默认情况下,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
Run Code Online (Sandbox Code Playgroud)
重新启动服务器。现在,如果您的文件夹中有一个布局文件“alpha.html.erb” app/themes/theme-name/layouts,您可以在控制器中使用它,如下所示:
layout "alpha"
Run Code Online (Sandbox Code Playgroud)
layouts/alpha.html.erbRails 将在配置的路径中查找。
您始终可以即兴发挥以满足您的需求。希望能帮助到你。