【问题标题】:Undefined method `each' for nil:NilClassnil:NilClass 的未定义方法“each”
【发布时间】:2013-01-28 13:42:43
【问题描述】:

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

对于我的 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

再次感谢您的帮助!

【问题讨论】:

    标签: mysql ruby-on-rails


    【解决方案1】:

    发生这种情况是因为 @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或者在重定向方法中声明它。

    【讨论】:

    • 哇。你们每个人都发现了我做错的事情。我给@Salil 答案是因为他是第一个并且得到了最彻底的回应。但是,@surase.prasad 给出了最简洁的答案,最终我按照他的指示让它工作。然而,只有@okliv 注意到我的条件有误。简而言之,我感谢您的所有帮助!我的解决方案:1)我将 @nearbylocations 线移到 def map 的正下方 2)我将其更改为 @nearbylocations = Masterlocation.find(:all, :conditions =&gt; ["latitude &gt; 25 AND latitude &lt; 30"], :order =&gt; ['nickname asc'])
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      魔鬼来了

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

      这个查询没有给出任何结果

      你有@nearbylocations = nil

      然后您收到undefined method 错误

      params[:id] 在 :conditions 中做什么?我猜你忘了删除它或者你忘了添加? 来查询""

      【讨论】:

      • 非常感谢您的回复!请参阅我上面的评论以获取更新。再次感谢您的帮助!
      猜你喜欢
      • 2017-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-10
      • 1970-01-01
      • 2014-03-08
      相关资源
      最近更新 更多