2009-11-11 46 views
0

我正在开发一个Web应用程序(很好地尝试)在Ruby on Rails上。Ruby和Nil对象

我在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> 

模板包含的跟踪:应用程序/视图/家庭/ index.html.erb

所有我想在我的主页上显示5个房屋(index.html.erb)

我错过了什么让它起作用?

非常感谢

编辑:

Houses_controller

NoMethodError主页#指数

展示应用/视图/房/ _index.html.erb其中第10行中提出:

当你没有想到它时,你有一个零对象! 您可能预期了Array的一个实例。而评估nil.each

发生 错误

提取的源(围绕线#10):

7:洗手间 8: 9: 10:<%@ houses.each做|房子| %> 11: 12:<%= H house.short_desc%> 13:<%= H house.bedrooms%>

模板包含的跟踪:应用/视图/家/ index.html.erb

+0

无关的答案,但难道不:收集=> @houses更合适? – 2009-11-11 22:34:41

回答

5

本地值的值应该是定义局部变量的哈希值。所以

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

然后

<% houses.each do |house| %> 

要重申的是,由于新的错误你发布表明,你还没有做正确:

如果你将其通过:locals,你想要houses.each,而不是**@**houses.each。没有蜗牛。局部变量没有@前缀;实例变量。

2

当地人发生局部变量的哈希值,像这样:

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

此外,当您在一个局部变量传递到一个局部的,你应该把它作为一个局部变量,而不是内部的实例变量部分,像这样:

<% houses.each do |house| %> 
# do stuff with each house 
<% end %> 
+0

这是返回相同的错误?我是否想将上面的代码放在我的app/views/home/index.html.erb中?再次感谢 – Crankyadmin 2009-11-11 18:42:45

+0

@Crankyadmin:它代替了你上面发布的代码。 ** **'@ houses'在你的控制器中被设置为任何有意义的东西吗? – Chuck 2009-11-11 18:48:32

+0

我已添加更多信息。存在_index.html.erb。我已经链接到我的房子控制器。再次感谢! – Crankyadmin 2009-11-11 19:30:54

0

你并不需要将它传递:locals,如果它是一个实例变量。实例变量在所有部分中都可用。

在你看来:

<% @houses.each do |house| %> 
    # do stuff with each house 
<% end %>