Переопределение представления наследования шаблона не работает в 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

в то время как я должен был использовать перед фильтром, чтобы установить пути просмотра в другой функции.

Причина, по которой я не осознавал этого раньше, заключалась в том, что пути просмотра были правильно напечатаны в макете.

Другие вопросы по тегам