nil的未定义方法`each':NilClass

时间:2013-01-28 05:29:15

标签: mysql ruby-on-rails

提前感谢您提供的任何帮助!

对于我的Ruby on Rails网站(1.8.7,2.3.15)我试图从MySQL表中提取数据,但我遇到了“未定义方法”错误。我对此代码的目标是显示属于某个纬度和纵向范围的所有位置的文本列表。

Production.log:

ActionView::TemplateError (undefined method `each' for nil:NilClass) on line #31 of     app/views/its/map.html.erb:
28: <!-- TestingLocations -->
29: 
30: <ul id="locations">
31: <% for masterlocation in @nearbylocations %>
32:     <li><%= masterlocation.nickname %></a></li>
33: <% end %>
34: </ul>

地图控制器:

def map
@its = Its.find(params[:id])
if @its.user_id == current_user.id
@locations = Location.find(:all, :conditions => ["its_id = ?", params[:id]], :order => "order_num asc")
@mapscount = Saved.count(:all, :conditions => ['its_id = ?', params[:id]])
#@date_filter = Date.civil(params[:date_filter].values_at(:year, :month, :day))
#    debugger
respond_to do |format|
format.html # map.html.erb
format.xml  { render :xml => @its }
end
else
redirect_to '/'

@nearbylocations = Masterlocation.find(:all, :conditions => ["latitude > 25 AND latitude < 30 AND longitude > -75 AND longitude < -70", params[:id]], :order => ['nickname asc'])
end

再次,感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

这是因为@nearbylocationsnil,因为它期待Array

您可以使用

来避免这种情况
<% for masterlocation in @nearbylocations %>
  <li><%= masterlocation.nickname %></a></li>
<% end if @nearbylocations %>

我还注意到你在重定向后被声明为实例变量。 理想情况下

redirect_to '/'
@nearbylocations = Masterlocation.find(:all, :conditions => ["latitude > 25 AND latitude < 30 AND longitude > -75 AND longitude < -70", params[:id]], :order => ['nickname asc'])

应该是

@nearbylocations = Masterlocation.find(:all, :conditions => ["latitude > 25 AND latitude < 30 AND longitude > -75 AND longitude < -70", params[:id]], :order => ['nickname asc'])
redirect_to '/'

但重定向后,您无法使用@nearbylocations,因此您必须使用render或在重定向方法中声明它。

答案 1 :(得分:0)

你得到一个nill错误导致你的@nearbylocations没有得到评估,因为'if'条件被执行而且Masterlocation查询在'else'。如果总是需要@nearbylocation,你可以将它移出条件。

答案 2 :(得分:0)

魔鬼在这里

:conditions => ["latitude > 25 AND latitude < 30 AND longitude > -75 AND longitude < -70", params[:id]]

此查询不提供任何内容

你有@nearbylocations = nil

并且收到undefined method错误

什么在:params[:id]的条件?我猜您忘记删除它,或者您忘记在?

中添加""进行查询