我可以在模型装饰器中的ruby关联中添加`after_add`回调吗?

时间:2017-05-11 21:49:57

标签: ruby-on-rails ruby spree spree-auth-devise

关联是has_and_belongs_to_many,并在gem中定义。我需要知道何时添加一个新的,所以我可以告诉答案是after_add回调,但我无法弄清楚如何在事后添加它。

我现在的代码不起作用:

(宝石中)

job.rb

module Spree
  class Job < Spree::Base
    has_and_belongs_to_many :users, join_table: 'spree_jobs_users', class_name: Spree.user_class.to_s
  end
end

(我破码)

job_decorator.rb

Spree::Job.class_eval do
  has_and_belongs_to_many :users, join_table: 'spree_jobs_users', 
class_name: Spree.user_class.to_s, after_add: :test

  def test
   # after method
  end
end

这有什么办法吗?或者我可以通过任何其他方式找出新工作的添加时间?

1 个答案:

答案 0 :(得分:0)

如果您希望每次向handle()表添加行时都运行一些代码,那么在我看来代码应该是连接表的责任,而不是spree_jobs_users。我会将此重新设置为Spree::Job关系,为您的连接表创建一个模型,并将您的代码放在该模型的has_many :through挂钩中。

根据Rails文档,“最简单的经验法则是,如果您需要将关系模型作为独立实体使用,则应设置:after_create关系。”

http://guides.rubyonrails.org/association_basics.html#choosing-between-has-many-through-and-has-and-belongs-to-many