我試圖更新對象的屬性,但通常我嘗試更新的對象不再存在。update_attributes()與update_all()&on已刪除的對象
例如爲:我是後處理的CSV文件,以獲得屬性:
array.each do |a|
player = Player.find_by_grepo_id(a[:grepo_id])
player.update_attributes(a)
end
時未找到播放器將拋出一個錯誤。
我從以往的經驗教訓:
的ActiveRecord :: Base.find總是拋出異常,如果它沒有找到一個紀錄,這是故意的。 我應該只使用查找,如果我絕對期望有任何我正在尋找。 如果我正在展示一個show動作並找不到該文章,我應該挽救該異常並呈現404(未找到) 而不是重定向到索引(技術上)。
如果我想通過它的id屬性找到某些東西而不強制異常,我應該使用動態查找器 find_by_id(在我的情況下爲find_by_grepo_id)如果它沒有找到具有該id的記錄,將返回false。
但是一旦運行包含上述代碼的任務,我得到
NoMethodError: undefined method `update_attributes' for nil:NilClass
這是因爲與該特定ID的玩家已經不存在了。如果我使用.present?
方法將update_attributes
調用包裝起來。
我在想什麼?不應該find_by_id方法不拋出一個錯誤,只是跳過它?
當您嘗試更新時發生錯誤,而不是查找。所以它不會在'Player.find_by_grepo_id(a [:grepo_id])上拋出一個錯誤' –
你的錯誤正在清除告訴,什麼是混亂..再次閱讀錯誤。 –
更新調用是否有類似的方式,還是必須將它包裝在.present中?方法? –