【问题标题】:Template inheritance's view overriding not working in Rails3模板继承的视图覆盖在 Rails3 中不起作用
【发布时间】:2012-11-29 10:41:08
【问题描述】:

我正在尝试在 Rails 3 中使用模板继承。我的 application_controller.rb 中有以下代码:

layout :set_layout

def set_layout
  layout_name = Club.find(1).layout.name
  prepend_view_path("views/#{layout_name}")
  layout_name
end

这确实正确地将布局设置为与特定俱乐部关联的布局(在本例中称为“layout1”),但是当我尝试通过创建以下文件夹结构来覆盖视图时:

app
-views
--home
---indes.html.erb
--layout1
---home
----index.html.erb

它捕获 views/home/index.html 而不是 views/layout1/home/index.html.erb

当我按如下方式打印视图路径时:

<% controller.view_paths.paths.each do |t| %>
  <%= t %><br>
<% end %>

它将正确的 views/layout1 打印为第一个,但仍然找不到正确的 index.html.erb 文件的内容。

在位于 layouts 文件夹中的 layout1.html.erb 中,我只说产量。

我是否误解了这个概念?

【问题讨论】:

    标签: ruby-on-rails-3 template-inheritance


    【解决方案1】:

    经过这么多小时的检查,我发现了问题。我在仅用于设置布局的函数中设置视图路径,例如

    layout :set_layout
    
    def set_layout
      prepend_view_paths ...
      #return the layout name
    end
    

    虽然我应该在过滤器之前使用来设置不同功能的视图路径。

    我之前没有意识到这一点的原因是视图路径在布局中打印正确..

    【讨论】:

      猜你喜欢
      • 2020-01-10
      • 1970-01-01
      • 1970-01-01
      • 2021-01-10
      • 2018-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-17
      相关资源
      最近更新 更多