0

控制器中的[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
4

1 回答 1

2

来自精美手册

update_attributes(属性,选项 = {})

从传入的哈希更新模型的属性并保存记录,所有这些都包含在事务中。

注意保存记录部分。因此,在您的update_attributes调用成功后,所有新值都已写入数据库,并且没有任何内容处于更改状态;因此,所有x_changed?方法都将返回 false。

如果您想要类似update_attributes但不这样做的东西save,那么您可以使用assign_attributesorattributes=代替:

@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

毕竟。

于 2012-07-02T03:01:06.723 回答