Rails 4:外部布局文件' views / layouts'夹

时间:2016-07-31 18:15:41

标签: ruby-on-rails layout 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

但是这段代码引发了以下错误:

Missing template layouts/../../themes/default/layout with {:locale=>[:en], :format .....

它仍然在布局文件夹中查找。我该如何解决这个问题。

1 个答案:

答案 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

您可以随时根据自己的需要进行即兴创作。希望它有所帮助。