2010-03-02 83 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