之間的區別我不知道write_attribute直到今天......軌道3:write_attribute和update_attribute
好像update_attribute,雖然不是要求的驗證仍然調用:before_save回調,而write_attribute沒有。
這就是這兩種方法的區別嗎?
之間的區別我不知道write_attribute直到今天......軌道3:write_attribute和update_attribute
好像update_attribute,雖然不是要求的驗證仍然調用:before_save回調,而write_attribute沒有。
這就是這兩種方法的區別嗎?
update_attribute
實際上會對數據庫進行物理調用。您完全執行UPDATE
聲明。這就像update_attributes
,但只是一個列。
雖然write_attribute
將分配屬性寫入基於AR的列的模型。如果您要覆蓋基於數據庫的屬性。
def first_name=(val)
write_attribute :first_name, val
end
# some_model.first_name => 'whatever val is'
def first_name=(val)
@first_name = val
end
# some_model.first_name => nil
我還沒有研究write_attribute
廣泛,但據我所知,基於ActiveRecord的模型處理分配給基於數據庫列稍有不同的磨訪問的運行。
write_attribute
用於當您要覆蓋方法的默認訪問器時。它本質上是self[:attribute]=(value)
的語法糖。
看一下ActiveRecord::Base documentation標題下的「覆蓋默認訪問器」。
如果您嘗試使用update_attribute
重寫文檔中的示例,我會想象它會以循環方式結束。