19191


railsで保存した直後に保存したデータをupdateしたいのですが、どうしたらよいのでしょうか。

[code]

    def after_save
      self.update(:name => self.name + 'ほげほげ')
    end
    
[/code]

このような感じでカラムのデータを書き換えるような事を想定しています。


CC BY-SA 3.0
2015-11-23T04:42:01.633
19187
2015-11-23T06:54:00.093
9149
question
ruby-on-rails
railsで保存した直後にデータを加工したい


保存するデータを書き換えたいということであれば、`before_save` を使うと良いです。

[code]

    class Hogege < ActiveRecord::Base
      before_save :fix_name
    
      private
    
      def fix_name
        self.name += "ほげほげ"
      end
    end
    
[/code]


CC BY-SA 3.0
2015-11-23T06:14:13.377
19191
2015-11-23T06:14:13.377
76
19187
answer


モデルを保存した直後に、属性を更新するには`after_save`コールバックで`update_column`メソッドを実行します。具体的なコードは次のとおりです。

[code]

    class Model < ActiveRecord::Base
      after_save do
        update_column(:name, "#{@name}ほげほげ")
      end
    end
    
[/code]

ポイントは、[update_attribute](http://api.rubyonrails.org/classes/ActiveRecord/Persistence.html#method-
i-update_column)です。update_columnは、バリデーションとコールバックを実行しません。


CC BY-SA 3.0
2015-11-23T06:54:00.093
19196
2015-11-23T06:54:00.093
7420
19187
answer