既存のhas_many
またはhas_and_belongs_to_many
の関係にafter_add
とafter_remove
コールバックを動的に追加する方法はありますか?例えばhas_manyまたはhabtmのafter_addコールバックとafter_removeコールバックを動的に作成しますか?
、私はモデルUser
、Thing
、そして参加モデルUserThingRelationship
を持っている、とUser
モデルは、このようなものであると仮定します。私はそのモジュールで、できるようにしたいと思い
class User < ActiveRecord::Base
has_many :user_thing_relationships
has_many :things, :through => :user_thing_relationships
end
User
を拡張すると、:after_add
と:after_remove
のコールバックがUser.has_many(:things, ...)
の関係に追加されます。すなわち、
class User < ActiveRecord::Base
has_many :user_thing_relationships
has_many :things, :through => :user_thing_relationships
does_awesome_stuff :things, :my_callback
def my_callback; puts "awesome"; end
end
が効果的
class User < ActiveRecord::Base
has_many :user_thing_relationships
has_many :things, :through => :user_thing_relationships, :after_add => :my_callback, :after_remove => :my_callback
def my_callback; puts "awesome"; end
end
これは、など、after_save
を追加するためにかなり効果的だモデルへのコールバックを行うことができると同じになるように
module DoesAwesomeStuff
def does_awesome_stuff relationship, callback
# or however this can be achieved...
after_add(relationship) callback
after_remove(relationship) callback
end
end
のようなものを持っているにActiveRecord::Base#after_save
は単なるクラスメソッドなので、拡張されています。
が、私の知る限りでは、あなたのコールバックはありません、漏れ出しますでしょうか?私。 2つのスレッドが同時にafter_addを実行する場合、どのコールバックが有効であるか分からないでしょうか? – nambrot