hello-world.jp.net
webエンジニアのメモ。とりあえずやってみる。

Railsで一時的にbefore_saveをskip

公開日時

Rails3.2で確認 昨日の Railsで一時的にupdated_atの更新をskip に続いて、 今回は、一時的にbefore_save等のcallbackをskipする方法です。

モデルのskip_callbackメソッドを使用することでskip可能です。

元に戻すにはset_callbackメソッドを使用します。

# サンプル
class User < ActiveRecord::Base
  before_save :hoge

  def hoge
    # save前にしたい処理
  end
end

上記のようなUserモデルがあった場合に

# before_save :hogeをskip
User.skip_callback(:save, :before, :hoge)

# 何かしたい処理を記述
user = User.find(1)
user.name = 'sample'
user.save  # hogeは実行されない

# before_save :hogeを有効に
User.set_callback(:save, :before, :hoge)

同様に、after_saveをskipしたり有効化したい場合は

# after_save :fugaをskip
User.skip_callback(:save, :after, :fuga)

# after_save :fugaを有効に
User.set_callback(:save, :after, :fuga)

とすればできます。

参考


Related #Rails

[s3][ruby]静的ウェブサイトホスティングしたサイトのTwitter Cardsが表示されない場合の対応

先日、S3の静的ウェブサイトホスティングを使ってサイト公開を行った際に、ページ表示やFacebookのOGP表示は問題なくできるのにTwitter Cardsだけ表示されない、という現象が発生しました。

[rails]bodyにclassを付けて特定のページでのみjsが動作するようにする

Asset Pipelineを使用するとjsやcssを結合してくれます。

[ruby][rails]pryでデバッグする

今更ながらpryを使ったデバッグの便利さに感動したのでメモ

[ruby][rails]sidekiqのnamespaceにハマった

sidekiq3.0.1で確認。