我对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?提前致谢
答案 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)
此外,还有一种更好的方法来验证字段的唯一性。在app/models/lbs2.rb
中(假设在那里定义了Lbs2对象),添加一行(在任何方法之外):
validates_uniqueness_of :body
阅读Rails Validations Guide了解详情。
希望这有帮助,
-Jeff T。