1. ホーム
  2. ruby-on-rails

[解決済み] ActiveRecordのコールバックを実行しないようにするにはどうすればよいですか?

2022-04-27 03:32:16

質問

after_saveコールバックを持ついくつかのモデルを持っています。通常はそれでいいのですが、開発用データを作成するときなど、コールバックを実行させずにモデルを保存したい場合があります。そのための簡単な方法はありますか?例えば...

Person#save( :run_callbacks => false )

または

Person#save_without_callbacks

Railsのドキュメントを見ましたが、何も見つかりませんでした。しかし、私の経験では、Railsのドキュメントが必ずしもすべてを語っているとは限りません。

アップデイト

見つけた ブログ記事 には、このようなモデルからコールバックを削除する方法について説明されています。

Foo.after_save.clear

その方法がどこで文書化されているのか見つけられませんでしたが、うまくいくようです。

どのように解決するのですか?

この解決策はRails 2のみです。

今調べたところ、解決策がありそうです。ActiveRecordのプライベートメソッドが2つあります。

update_without_callbacks
create_without_callbacks

これらのメソッドを呼び出すには、sendを使用する必要があります。

p = Person.new(:name => 'foo')
p.send(:create_without_callbacks)

p = Person.find(1)
p.send(:update_without_callbacks)

この機能は、コンソールやランダムなテストを行う際にのみ使用するものであることは間違いありません。お役に立てれば幸いです。