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
什麼是貨物的價值.logs.last? – sakurashinken
由於標籤,我們假設我們在Rails中。發貨和用戶之間是否有聯繫?此外,你是否跳入'rails console'並驗證'shipment.logs.last.user_id'是否按預期返回?如果你有正確的關聯創建,我會假設你可以做一些類似'shipment.logs.last.user.name'的東西。 – ddubs
我更新了問題。當我使用'byebug'時,這些協會起作用。我不明白爲什麼在代碼自然運行時出現錯誤。 – BBORNCR