ruby-on-rails – 当以另一种方式创建记录时,Rails Association Callbacks没有运行

ruby-on-rails – 当以另一种方式创建记录时,Rails Association Callbacks没有运行,第1张

概述这是我的用户模型及其订阅: # app/models/user.rbclass User < ActiveRecord::Base has_many :subscriptions, :before_add => :cancel_subscriptions! def cancel_subscriptions!(new_subscription=nil) subscriptions 这是我的用户模型及其订阅:

# app/models/user.rbclass User < ActiveRecord::Base  has_many :subscriptions,:before_add => :cancel_subscriptions!  def cancel_subscriptions!(new_subscription=nil)    subscriptions.each(&:cancel!)  endend# app/models/subscription.rbclass Subscription < ActiveRecord::Base  belongs_to :userend

所以,当我做some_user.subscriptions.create时,它会执行:cancel_subscriptions!回调然后我很高兴.但后来我做了Subscription.create:user => some_user回调似乎没有被调用,我感到难过,非常非常伤心.

有没有办法确保在创建与用户关联的订阅时执行回调?

PD:我真的不想在我的订阅模型中写一个:before_create,因为我认为取消所有订阅应该是用户模型的责任.

解决方法 从技术上讲,属于:belongs_to的inverse_of选项应该处理这种情况.具体来说,让关联的另一方知道这方面的变化.但这只适用于另一方是has_one的情况.从文档中不清楚,但你可以 see it the source.

所以截至目前,没有办法让它自动运行.

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

总结

以上是内存溢出为你收集整理的ruby-on-rails – 当以另一种方式创建记录时,Rails Association Callbacks没有运行全部内容,希望文章能够帮你解决ruby-on-rails – 当以另一种方式创建记录时,Rails Association Callbacks没有运行所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1272281.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存