我正在從rails 3.2.13升級到4並且遇到了更新模型時遇到的問題。我試圖更新模型中的一個屬性,我只有id,我也想驗證和回調。這種精細曾在軌道3,但我有在軌道4無法在沒有選擇updated_at屬性的情況下更新Rails 4中的模型
在軌道4,5麻煩,如果我做的:
user = User.select(:id).first
user.first_name = 'name'
user.save!
我得到的錯誤:
NoMethodError: undefined method `type_cast' for nil:NilClass
from C:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/activerecord-4.0.3/lib/active_record/attribute_methods/time_zone_conversion.rb:10:in `type_cast'
如果我運行rails 3 first_name中的相同代碼被更新,並且updated_at被更新爲current_time。
如果在軌道4,5我運行:
user = User.select(:id, :updated_at).first
user.first_name = 'name'
user.save!
,一切工作正常。
我假設的錯誤是由事實的updated_at列不存在造成的,但它不應該需要的人。在我的許多查詢中,我只選擇了速度的ID。 Rails 3完美地處理了這一點。我也嘗試過使用update_attributes,但我收到了同樣的錯誤。它在我使用update_column時起作用,但它會跳過我想要的驗證和回調。
我不知道這是爲什麼在軌道4發生或如何讓周圍沒有顯式調用驗證和回調update_column後或選擇,我不應該需要做的updated_at屬性。
在導軌3和4中User.select(:id).first返回一個僅具有id屬性的用戶對象。如果我執行上面在rails 3中列出的代碼,我保存時的查詢是UPDATE「users」SET「first_name」= name,「updated_at」='2014-02-28 01:17:30.448205'WHERE「users」。「 id「= 1這正是我想要的,但它在rails 4中不起作用。 – user2297272
也是,update_attribute調用保存,所以您的所有回調仍應該運行。 – Donald
update_attribute導致與上面相同的錯誤 – user2297272