创造记录时,这是我的User
模型及其Subscription
:的Rails协会回调不运行以另一种方式
# app/models/user.rb
class User < ActiveRecord::Base
has_many :subscriptions, :before_add => :cancel_subscriptions!
def cancel_subscriptions!(new_subscription=nil)
subscriptions.each(&:cancel!)
end
end
# app/models/subscription.rb
class Subscription < ActiveRecord::Base
belongs_to :user
end
所以,当我做some_user.subscriptions.create
,它执行:cancel_subscriptions!
回调,然后我很高兴。但后来我做Subscription.create :user => some_user
回调似乎并没有被调用,我感到伤心,所以非常非常伤心。
有没有一种方法可以确保在创建与User
关联的Subscription
时执行回调?
PD:我真的很想不必写在我的Subscription
模型:before_create
,因为我觉得取消所有预订应该是User
模型的责任。
如果用户正在运行show(这是合理的),那么'Subscription.create:user => some_user'是否有意义?代码本身是有道理的,但也许不是从API的角度来看,如果用户运行秀,那么用户应该运行整个演出。 –
我完全同意,@mu!实际上,我每次都使用'some_user.subscriptions.create'。这更多是一种偏执/技术好奇的问题。 –
我认为':before_add'附加到集合上,但集合不够聪明,无法知道背后发生的事情。 –