rails controller使用[column_name] _changed?不行

时间:2012-07-02 02:50:22

标签: ruby-on-rails ruby model 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

1 个答案:

答案 0 :(得分:2)

来自fine manual

  

update_attributes(attributes,options = {})

     

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

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

如果你想要update_attributes之类但却没有使用save,那么你可以改为使用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

毕竟。