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

railsとsinatraの使い分け

sinatraでアプリを作っていたら、色々機能が足りなかったので継ぎ足し継ぎ足しで色々増やしていったら結局railsのようなもの、になってしまいました。

[mysql][rails]Character set 'utf8mb4' is not a compiled character set and is not specified in the '/usr/share/mysql/charsets/Index.xml' file

mysql5.1が動いていた環境をmysql5.6にアップデートした後、rake db:createで utf8mb4のDBを作成しようとしたところ以下のエラーが発生

[rails]omniauth-twitterで大きいサイズ(bigger)のプロフィール画像を取得する

ruby2.1, rails4.1.1で確認 omniauth-twitterを使ってtwitter認証を行った際にプロフィール画像を取得したかったのですが、デフォルト設定だと、`auth['info']['image']` に入ってくる画像URLの画像サイズが小さいので、大きい画像を取得するようにしました。

[rails]erbとunderscore.jsを一緒に使ったらundefined local variables in templatesエラーが発生

erbのテンプレート内にunderscore.js用のテンプレートを記述していたら