2012-07-02 60 views
0

控制器中的[column_name]_changed?不起作用,但在模型中可以嗎?rails controller使用[column_name] _changed?不起作用

original_name = "test1" 
new_name = "test2" 

@user = User.find(params[:id]) 
puts"__________#{@user.name}" # "test1" 
@user.update_attributes(params[:user]) 
puts"__________#{@user.name}" # "test2" 
@user.name_changed? # return false is't not work 

回答

2

fine manual

update_attributes方法(屬性,選項= {})

更新從模型的屬性傳入的散列和保存記錄,所有包裹在交易中。

注意保存記錄部分。因此,在您的update_attributes調用成功後,所有新值都已寫入數據庫,並且更改的狀態中不會有任何內容;因此,所有x_changed?方法將返回false。

如果你想要的東西,就像是update_attributes但沒有做save,那麼CA使用assign_attributesattributes=代替:

@user.assign_attributes(params[:user]) 
# or @user.attributes = params[:user] 
#... 
@user.save # You have to do this by hand 

update_attributes方法僅僅是這樣的:

with_transaction_returning_status do 
    self.assign_attributes(attributes, options) 
    save 
end 

畢竟。

+0

我會實現這個功能,我應該怎麼做? – s6520643

+0

@ s6520643:所以你想要更新並保存爲不同的步驟?在我更新的答案中使用'assign_attributes'和單獨的'save'。 –

相關問題