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(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

結局。

于 2012-07-02T03:01:06.723 に答える