以下の方法で使用update_attributes
する場合:
title = Post.first.title
title.gsub!(/a/, 'b')
Post.first.update_attributes(:title => title)
タイトルがデータベースに正しく保存されていないことがわかりました。再読み込みすると、「a」が「b」に変更されていません。
以下の方法で使用update_attributes
する場合:
title = Post.first.title
title.gsub!(/a/, 'b')
Post.first.update_attributes(:title => title)
タイトルがデータベースに正しく保存されていないことがわかりました。再読み込みすると、「a」が「b」に変更されていません。
ActiveRecord は、属性値のオブジェクト ID が変化したかどうかを見て、属性が変化したかどうかを判断します。同じオブジェクトを返しましたが、それは何も変更されていないと見なされます。
コードを次のように変更すると、問題が修正されます。
title = Post.first.title
title = title.gsub(/a/, 'b')
Post.first.update_attributes(:title => title)
別の文字列を返すと、変更が ActiveRecord によって検出され、データベースに保存されます。