創造記錄時,這是我的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'附加到集合上,但集合不夠聰明,無法知道背後發生的事情。 –