Render: макет ищет частичное вместо макета
Я понимаю, что это плохая идея, но из того, что я видел в ApplicationControllers, используется:
render :layout => "something" ...
Следует рендерить, используя макет, расположенный на views/layouts/something.html.erb
Однако, когда я делаю этот вызов изнутри представления, он выдает ошибку с:
Missing partial my_controller_name/something with ...
Searched in:
* "{path here}/app/views"
Который мне кажется, что он ищет частичное, а не макет, как я указал. Кто-нибудь знает, что с этим происходит?
Достаточно маленький пример, чтобы воспроизвести его:
<%= render :layout => 'something' do %>
<div>Hello</div>
<% end %>
Это все под Rails vs 4.0.2
1 ответ
render
в контроллерах работает иначе, чем в представлениях. В контроллерах это в первую очередь для рендеринга шаблонов действий, в то время как в представлениях это в основном для рендеринга частичных шаблонов. Если вы хотите отобразить конкретный макет для действия, у вас есть несколько опций, но все они находятся в контроллере.
Если вы хотите, чтобы каждое действие в конкретном контроллере использовало этот макет, вы можете указать layout 'something'
в этом контроллере (обычно в верхней части) или для ApplesController
Вы можете создать новый макет в app/views/layouts/apples.html.erb
и это будет автоматически использоваться в качестве макета по умолчанию для ApplesController
,
Если вы хотите использовать только одно действие в контроллере, чтобы использовать этот макет, вы можете использовать render layout: 'something'
внутри действия контроллера, где подразумевается, что текущим действием является рендеринг.
Ссылки из документации по Rails: