Рендеринг частичного макета ничего не отображает - PullRequest
1 голос
/ 24 ноября 2011

Эффект, который я ищу, заключается в реализации многократно используемого компонента для HTML-блока. Я обнаружил, что люди, кажется, используют что-то вроде следующего примера, но он просто не работает для меня. У меня есть:

# app/views/home/index.html.erb
top
<% render :layout => 'layouts/box' do %>
  <p>Here is some content</p>
<% end %>
bottom

и

# app/views/layouts/_box.html.erb
inside box
<%= yield %>

Конечный результат, который я получаю в браузере:

top bottom

Тем не менее, я могу видеть в журналах:

Processing by HomeController#index as HTML
Rendered layouts/_box.html.erb (0.1ms)
Rendered home/index.html.erb within layouts/application (1.2ms)

Итак, макет коробки обрабатывается. Это просто ничего не показывает. Есть идеи?

Я использую Rails 3.1.3 и Ruby 1.9.2-p290.

Ответы [ 3 ]

2 голосов
/ 24 ноября 2011
<% @Var %>

скрытый контент

<%= @var %>

показывает содержание

так что это может быть:

<%= render :layout => 'layouts/box' do %>
  <p>Here is some content</p>
<% end %>

что тебе нужно.

2 голосов
/ 24 ноября 2011

Вы забыли вывести свой вызов 'render':

<%= render ... %>

вместо

<% render ... %>
0 голосов
/ 24 ноября 2011

Может быть, вы перепутали рендеринг частичного и выходного контента через content_for:

Рендеринг частичного:

# app/views/home/index.html.erb
top
<%= render 'layouts/box' %>
bottom

# app/views/layouts/_box.html.erb
Here is some content inside the box

# result:
top
Here is some content inside the box
bottom

Сдача контента через content_for:

# app/views/home/index.html.erb
top
<% content_for :box do %>
Some content
<% end %>
bottom

# app/views/layouts/application.html.erb
<%= yield :box %>
<%= yield %>

# result
Some content
top
bottom

Вы можете сделать:

# app/views/home/index.html.erb
top
<p>Here is some content</p>
<%= render 'layouts/box' %>
bottom

# app/layouts/_box.html.erb
inside box

Как правило, папка макетов предназначена для макетов (контейнера). Если вам нужно использовать частичное на разных контроллерах, поместите его в app / views / shared / _your_partial.html.erb.

Больше информации здесь: для yield и content_for: http://guides.rubyonrails.org/layouts_and_rendering.html#understanding-yield

Для частичных: http://guides.rubyonrails.org/layouts_and_rendering.html#using-partials

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...