2012-07-02 54 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'。 –

相关问题