gpt4 book ai didi

ruby-on-rails - 以其他方式创建记录时,Rails 关联回调未运行

转载 作者:行者123 更新时间:2023-12-03 15:51:33 26 4
gpt4 key购买 nike

这是我的 User模型及其 Subscription :

# 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回调似乎没有被调用,我很难过,非常非常难过。

有没有办法确保回调在 Subscription 时执行关联到 User被 build ?

PD:我真的不想写 :before_create在我的 Subscription模型,因为我认为取消所有订阅应该是 User模特的责任。

最佳答案

从技术上讲,有 :inverse_of belongs_to 的选项这应该处理这种情况。具体来说,让关联的另一边知道这一边的变化。但这只有在对方是 has_one 时才有效。 .文档中不清楚,但您可以 see it the source .

所以到目前为止还没有办法让它自动工作。

关于 PD 的说明:您确实希望将订阅功能从用户模型中移出。在 User 模型中管理订阅会增加耦合。并且因为您有订阅模型,无论如何让它完成工作并管理单个用户的订阅。还有 before_add无论如何都不是管理订阅的好地方。您在保存任何资源之前运行的 hook_ 中执行破坏性操作。也就是说,您可以取消所有订阅,并且您的新订阅未通过验证。因此,您丢失了旧订阅(您不知道之前哪个是事件的)并且您拥有无法保存的无效新订阅。

关于ruby-on-rails - 以其他方式创建记录时,Rails 关联回调未运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7199359/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com