2010-03-02 87 views
0

我对Ruby非常陌生。我有以下代码给我一个错误。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 

被示出的错误时,我打的网址是 NoMethodError在上述ItemsController#填充 未定义的方法`LAT =”为LBS2 ID:无,体:无,created_at:无,的updated_at:无

这段代码在没有“if!Lbs2.find_by_body(ni.body)”语句的情况下工作得很完美。当我包括这个,为了避免多余的news_items,它给了我上面提到的错误。有人可以告诉我如何摆脱这个错误,同时避免冗余news_items在Lbs2中填充?在此先感谢

+0

它没有工作,当我更换LBS2用t。 Lbs2是创建用于存储lat,lng和body的模型。你能否建议一些其他的改变? – mamatha 2010-03-02 16:14:49

+0

我认为Lbs2有一个“拉特”列? – Shadowfirebird 2010-03-02 17:02:54

+0

您可能还想标记这个问题“rails” – Shadowfirebird 2010-03-02 17:04:05

回答

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 
+0

谢谢Jeff T.您说得对。 lat和lng字段没有被保存。问题是数据类型“double”在ruby中不被支持。数据类型“float”必须被使用。我放弃了Lbs2并做了ruby脚本/生成模型Lbs lat:float lng:float body:text。在此之后一切都很完美。 – mamatha 2010-03-03 00:15:08

0

OK,有几件事情怎么回事。错误消息是说它不知道如何将某些内容保存到Lbs2对象的“lat”属性。即使你告诉脚本/产生了你想要一个Lbs2的“lat”字段,它看起来好像根本没有得到保存。您可以检查db/schema.rb以确保。但是您的第一步可能是将该字段添加到数据库中的相应表格中。阅读Rails Migrations Guide了解更多信息。

此外,还有一个更好的方法来验证字段的唯一性。在app/models/lbs2.rb(假设你的LBS2对象被定义在那里),添加一行(在任何方法以外),上面写着:

validates_uniqueness_of :body 

阅读Rails Validations Guide更多信息。

希望这有助于
-Jeff T.

+0

对不起,如果我错了[我是一个像@mamatha的初学者],但我认为我做的是不同的validates_uniqueness_of。 如果我想只有一个项目具有相同的“lat”和“lng”,但不关心具有相同“lat”和不同“lng”的许多项目,validates_uniqueness_of会为我执行此操作吗? [对不起我的英语] – 2010-03-02 20:00:26

+1

嗨j。,是的,你正在验证'lat'和'lng'的*组合的唯一性,这确实是不同的。我不认为你可以使用'validates_uniqueness_of'来做到这一点。 @mamatha手动验证'body'字段的唯一性,并且我展示了一个更好的方法来实现这一点。 – 2010-03-02 21:37:15

+0

tks,jeff。 我不知道为什么我认为他想验证多个attibute = P 无论如何,再次感谢您的解释。 – 2010-03-03 10:59:24