Рубин и ноль Объект - PullRequest
       23

Рубин и ноль Объект

0 голосов
/ 11 ноября 2009

Я разрабатываю веб-приложение (хорошо пытаюсь) в Ruby on Rails.

У меня есть частичный рендер в моем index.html.erb

<%= render :partial => "houses/index", :locals => @houses %>

index.html.erb загружается, когда пользователь попадает в корень моего домена. Это частичная причина этой ошибки:

You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.each

Извлеченный источник около строки 8

5:     <th>Washrooms</th>
6:   </tr>
7: 
8: <% @houses.each do |house| %>
9:   <tr>
10:     <td><%=h house.short_desc %></td>
11:     <td><%=h house.bedrooms %></td>

Трассировка включения шаблона: app / views / home / index.html.erb

Все, что я хотел бы, это показать 5 домов на моей домашней странице (index.html.erb)

Чего мне не хватает, чтобы заставить это работать?

Большое спасибо

РЕДАКТИРОВАТЬ:

Houses_controller

NoMethodError in Home # index

Отображение приложения / views / Houses / _index.html.erb, где поднята строка # 10:

У вас есть нулевой объект, когда вы этого не ожидали! Возможно, вы ожидали экземпляр Array. Произошла ошибка при оценке nil.each

Извлеченный источник (около строки # 10):

7: санузлы 8: 9: 10: <% @ homes.each do | house | %> 11: 12: <% = h house.short_desc%> 13: <% = h house.bedrooms%>

Трассировка включения шаблона: app / views / home / index.html.erb

Ответы [ 3 ]

5 голосов
/ 11 ноября 2009

Предполагается, что значением: locals является Hash, определяющий локальные переменные. Итак

<%= render :partial => "houses/index", :locals => {:houses => @houses} %>

, а затем

<% houses.each do |house| %>

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

Если вы проходите через :locals, вы хотите houses.each, а не **@**houses.each. Нет улитки Локальные переменные не имеют префикса @; переменные экземпляра делают.

2 голосов
/ 11 ноября 2009

Locals принимает хеш локальных переменных, например так:

<%= render :partial => "houses/index", :locals => { :houses => @houses } %>

Кроме того, когда вы передаете локальную переменную в партиал, вы должны использовать ее как локальную переменную, а не переменную экземпляра в партиале, например:

<% houses.each do |house| %>
# do stuff with each house
<% end %>
0 голосов
/ 11 ноября 2009

Вам не нужно передавать его в :locals, если это переменная экземпляра. Переменные экземпляра доступны во всех частях.

На ваш взгляд:

<% @houses.each do |house| %>
  # do stuff with each house
<% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...