2014-11-09 1 views
0

Я понимаю, что это плохая идея, но от того, что я видел в ApplicationControllers, используя:Рендер: раскладка ищет частичное вместо макета

render :layout => "something" ... 

Если визуализации с использованием макета, расположенного на views/layouts/something.html.erb

Однако, когда я делаю этот вызов с внутренней стороны зрения, ошибки с помощью:

Missing partial my_controller_name/something with ... 
Searched in: 
* "{path here}/app/views" 

Что мне кажется, его ищет частичное, а не макет, как я зр ecified. Кто-нибудь знает, что с этим происходит?

Достаточное пример достаточно мал, чтобы его воспроизвести:

<%= render :layout => 'something' do %> 
    <div>Hello</div> 
<% end %> 

Это все под Rails против 4.0.2

+0

Да, это несколько является экземпляром проблемы XY. Моя цель в целом - это нечто совсем другое, но только для этого вопроса я действительно задаюсь вопросом, почему он действует так, как есть. – Serge

+0

можете ли вы разместить код, который вы используете в представлении? – Peege151

+0

@ Peege151 Конечно, дайте мне одну минуту ... – Serge

ответ

0

render работает по-разному в контроллерах, чем это делает в представлениях. В контроллерах это прежде всего для рендеринга шаблонов действий, в то время как в представлениях это прежде всего для рендеринга частичных шаблонов. Если вы хотите отобразить конкретный макет для действия, у вас есть несколько вариантов, но все они находятся в контроллере.

Если вы хотите каждое действия в конкретном контроллере, чтобы использовать эту схему, вы можете либо указать layout 'something' в этом контроллере (обычно около вершины) или для ApplesController, вы можете создать новую структуру в app/views/layouts/apples.html.erb и это автоматически используется как макет по умолчанию для ApplesController.

Если вы хотите только одно действие в контроллере для использования этого макета, вы можете использовать свой render layout: 'something' внутри действия контроллера, где действие для визуализации подразумевается как текущее действие.

Ссылки из документации Rails:

+0

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