Ruby脚本中的调试错误

时间:2010-03-02 16:06:02

标签: ruby-on-rails debugging code-snippets

我对Ruby很新。我有以下代码,它给了我一个错误。

class ItemsController < ApplicationController
  def populate
    Location.all.each { |l|
      place = l.radar_place 
      next if !place 
      news_items = place.radars
      news_items.each { |ni|
        t = Lbs2.new  
        t.lat = l.lat
        t.lng = l.lng
        t.body = ni.body 
        t.save if !Lbs2.find_by_body(ni.body) #avoiding redundant news_items
      }
    }
    render :text => "Success"  
  end
end

点击网址时显示的错误是   ItemsController中的NoMethodError #populate 未定义的方法`lat ='用于Lbs2 id:nil,body:nil,created_at:nil,updated_at:nil

这段代码完美无需“if!Lbs2.find_by_body(ni.body)”声明。当我包含这个时,为了避免冗余的news_items,它给了我上面提到的错误。有人可以告诉我如何摆脱这个错误,同时避免多余的news_items填充Lbs2?提前致谢

2 个答案:

答案 0 :(得分:0)

为了避免多余的项目我认为你可以覆盖validate()方法。如下所示:

def validate
   conditions = {"lat" => self.lat, "lng" => self.lng}
   if Lbs2.first(:conditions => conditions)
      errors.add_to_base "Your error message"
   end
end

答案 1 :(得分:0)

好的,这里有一些事情发生了。错误消息说它不知道如何将某些内容保存到Lbs2对象的“lat”属性中。即使你告诉script / generate你想要一个Lbs2的“lat”字段,看起来它毕竟没有得到保存。您可以检查db / schema.rb以确定。但您的第一步可能是将该字段添加到数据库中的相应表中。请阅读Rails Migrations Guide了解详情。

此外,还有一种更好的方法来验证字段的唯一性。在app/models/lbs2.rb中(假设在那里定义了Lbs2对象),添加一行(在任何方法之外):

validates_uniqueness_of :body

阅读Rails Validations Guide了解详情。

希望这有帮助,
-Jeff T。