1

初期化子からafter_createがActiveRecordモデルに動的に追加されるRailsアプリケーションがあります。

instance_evalを試しました

Foo.instance_eval do
  send "after_create", lambda{|r| r.some_method}
end

およびclass_eval

Foo.class_eval do
  after_create lambda{|r| r.some_method}
end

Foo.new._create_callbacksそれらを作成した直後に実行すると、両方のコールバックが返されます。

Railsサーバーにリクエストを送信すると、2つのコールバックが消えます。

この問題は開発時にのみ発生します。ステージングとプロダクションは正常に機能しています。

を設定するconfig.cache_classes = truedevelopment.rb、コールバックは持続し、消えません。

このコードを他のアプリケーションに複製しましたが、正常に動作するため、構成の問題である可能性があります。

注:lvh.meでサブドメインを使用しています

  • Rails 3.1.1
  • Ruby 1.9.2-p180

ありがとう :)

4

2 に答える 2

2

この質問は、開発モードでのサルのパッチ適用に関する同様の問題のようであり、潜在的な解決策があります。

Railsに自動ロードされるコードにモンキーパッチを適用する方法は?

于 2012-08-30T01:17:53.520 に答える
0

開発モードの Rails では、新しいリクエストが来るとすべてのモデルがリロードされます。何かを変更するたびにサーバーを再起動する必要がないため、これは便利です。ただし、本番環境ではパフォーマンスが低下するため、これは発生しません。ここでの問題は、初期化子が Rails アプリの初期化中にのみ実行されることです。モデル自体ではなく、イニシャライザで after_create を設定しようとしている理由をお尋ねしてもよろしいですか?

于 2012-08-30T00:09:09.443 に答える