2017-08-30 45 views
0

此代碼給我下面的錯誤:爲什麼這個函數給出了一個未定義的方法錯誤,但是使用byebug運行?

undefined method `user_id' for nil:NilClass

def show_username(shipment) 
    userid = shipment.logs.last.user_id 
    User.find(userid).name 
    end 

但是,如果我插入一個byebug我可以沒有任何錯誤運行代碼和訪問所有的變量和方法。

使用byebug我得到如下答覆:

(byebug) shipment.logs.last 
Log Load (0.3ms) SELECT "logs".* FROM "logs" WHERE "logs"."shipment_id" = $1 ORDER BY "logs"."id" DESC LIMIT $2 [["shipment_id", 95], ["LIMIT", 1]] 
    #<Log id: 87, activity: "Shipment updated", created_at: "2017-08-28 15:19:07", updated_at: "2017-08-28 15:19:07", shipment_id: 95, user_id: 3> 

(byebug) shipment.logs.last.user_id 
    Log Load (2.6ms) SELECT "logs".* FROM "logs" WHERE "logs"."shipment_id" = $1 ORDER BY "logs"."id" DESC LIMIT $2 [["shipment_id", 95], ["LIMIT", 1]] 
3 
+0

什麼是貨物的價值.logs.last? – sakurashinken

+0

由於標籤,我們假設我們在Rails中。發貨和用戶之間是否有聯繫?此外,你是否跳入'rails console'並驗證'shipment.logs.last.user_id'是否按預期返回?如果你有正確的關聯創建,我會假設你可以做一些類似'shipment.logs.last.user.name'的東西。 – ddubs

+0

我更新了問題。當我使用'byebug'時,這些協會起作用。我不明白爲什麼在代碼自然運行時出現錯誤。 – BBORNCR

回答

1

shipment.logs.last必須nil!也許你調用的方法很多次,你byebug在上下文停止該shipment.logs.lastnil ...

嘗試調試給人一種狀態叫byebug

def show_username(shipment) 
    byebug unless shipment.logs.last 
    userid = shipment.logs.last.user_id 
    User.find(userid).name 
end 
+0

這就是問題!當我一個接一個地逐個逐眼地看到最後的貨物時,沒有原木。我將驗證該日誌是否存在。 – BBORNCR

相關問題