2011-05-27 128 views

回答

15

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的模型處理分配給基於數據庫列稍有不同的磨訪問的運行。

12

write_attribute用於當您要覆蓋方法的默認訪問器時。它本質上是self[:attribute]=(value)的語法糖。

看一下ActiveRecord::Base documentation標題下的「覆蓋默認訪問器」。

如果您嘗試使用update_attribute重寫文檔中的示例,我會想象它會以循環方式結束。