Переопределение представления наследования шаблона не работает в Rails3
Я пытаюсь использовать шаблон наследования в 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.
В моем layout1.html.erb, расположенном в папке layouts, я просто говорю yield.
Я как-то неправильно понял концепцию?
1 ответ
После стольких часов, потраченных на проверку этого, я обнаружил проблему. Я устанавливал пути просмотра в функции, которая используется только для установки макета, как
layout :set_layout
def set_layout
prepend_view_paths ...
#return the layout name
end
в то время как я должен был использовать перед фильтром, чтобы установить пути просмотра в другой функции.
Причина, по которой я не осознавал этого раньше, заключалась в том, что пути просмотра были правильно напечатаны в макете.