2010-10-04 29 views
1

我的驗證工作了一段時間,或者我想。現在,我回過頭來看看他們做了些什麼,然後我發現上面的錯誤。我認爲這意味着我正在用.new方法創建一個零對象,但我只是迷失了方向。這似乎是由控制器創建一個新對象時的一個問題,因爲即使我驗證了另一個@thing屬性的樹中的下一個驗證,也會拋出相同的錯誤。不過即使我在控制檯中創建對象並測試它的存在的.save方法仍然拋出了錯誤 - 未定義的方法「的user_id」的零:NilClass我在創建一個零對象嗎? (未定義的方法___爲零:NilClass)錯誤 - 軌道上的紅寶石

ThingsController: 

def create 
    @thing = Thing.new(params[:thing]) 
    @thing.user_id = @currentuser_id 

    if @thing.save 
    flash[:notice] = "Successfully created thing." 
    redirect_to @thing 
    else 
    #flash[:notice] = "Your thing did not get created." 
    render 'otherthings/show'  
    end 
end 

Thing.rb 
    validate :user_valid 
    def user_valid 
    errors.add("you must be logged in to add a thing") unless @thing.user_id? 
    end 

我有點軌道上紅寶石的noob(即< 8周),這是我的第一個stackoverflow問題,所以容易對我,如果這是愚蠢的明顯。我也嘗試過params [「thing」],因爲在手動創建params以匹配日誌文件(然而params [:thing]沒有)之後,在控制檯中工作,但是這並沒有改變任何錯誤我得到的消息。

+0

錯誤是什麼行? – Coderama 2010-10-04 22:27:15

+0

這個錯誤是彈出來的,指的是控制器在thing.save上的調用,然後在模型行上啓動errors.add ...但我認爲下面的傢伙回答我:-) – 2010-10-04 22:55:48

回答

2

當您致電unless @thing.user_id?時,由於沒有@thing(它不會從您的控制器作爲實例變量從您的控制器傳遞到您的模型)翻轉出來。

我不記得它是如何工作的,但我很確定,當調用validate :user_valid時,它會傳遞記錄以供您驗證。如果確實如此,您可以嘗試:

def user_valid 
    errors.add("you must be logged in to add a thing") unless user_id? 
end 
+1

如果他已經在'Thing'模型他應該能夠使用'user_id?'或'user.present?'(如果它是一個關聯) – Garrett 2010-10-04 22:31:33

+0

謝謝,之後我意識到。我會全面更新答案以反映這一點。 – theIV 2010-10-04 22:34:20

+0

感謝 - 你們真的很有幫助......這似乎解決了user_id的問題,我想我可能有一些類似的問題與其他驗證,我應該能夠通過一些試驗和錯誤後消化簡要的簡單解釋。 – 2010-10-04 22:53:44

相關問題