我正在Ruby on Rails中开发一个webapp(很好的尝试)。
我的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)
我错过了什么才能让它发挥作用?
非常感谢
编辑:
Home #index
中的NoMethodError显示第10行引出的app / views / houses / _index.html.erb:
当你没想到它时,你有一个零对象! 您可能期望一个Array实例。 评估nil.each时发生错误
提取的来源(第10行):
7:洗手间 8: 9: 10:&lt;%@ houses.each do | house | %GT; 11: 12:&lt;%= h house.short_desc%&gt; 13:&lt;%= h house.bedrooms%&gt;模板包含跟踪:app / views / home / index.html.erb
答案 0 :(得分:5)
值:locals应该是定义局部变量的Hash。所以
<%= render :partial => "houses/index", :locals => {:houses => @houses} %>
然后
<% houses.each do |house| %>
重申一下,因为您发布的新错误表明您仍未正确执行此操作:
如果您通过:locals
传递,则需要houses.each
,而不是**@**houses.each。没有蜗牛。局部变量没有@
前缀;实例变量可以。
答案 1 :(得分:2)
Locals采用局部变量的哈希值,如下所示:
<%= render :partial => "houses/index", :locals => { :houses => @houses } %>
此外,当您将局部变量传递给partial时,您应该将其用作局部变量而不是partial中的实例变量,如下所示:
<% houses.each do |house| %>
# do stuff with each house
<% end %>
答案 2 :(得分:0)
如果它是实例变量,则无需在:locals
中传递它。实例变量在所有部分中都可用。
在您看来:
<% @houses.each do |house| %>
# do stuff with each house
<% end %>