なぜこれが起こるのか理解できません:
class Foo < ActiveRecord::Base
belongs_to :belongable, :polymorphic => true
def after_save
if belongable.kind_of?(User)
send(:some_method)
end
end
end
class Bar < Foo
def some_method
#Do something
end
end
class Group < ActiveRecord::Base
has_many :belongings, :as => :belongable
end
class User < ActiveRecord::Base
has_many :belongings, :as => :belongable
end
クラス 'Bar' は、Foo から継承する STI モデルです (Foo には 'type' 属性があります)。グループとユーザーの両方が多くのバーを持つことができます。
以下は期待どおりに機能します (some_method は呼び出されません)。
g = Group.create
g.belongings << Bar.new
g.save
以下は some_method を呼び出します。
Group.first.belongings.first.update_attributes(:attr => :val)
どのように、なぜ?!アソシエーションが既に存在すると、'after_save' コールバックの条件が評価されないのはなぜですか?