1

该关联是has_and_belongs_to_many并且在 gem 中定义。我需要知道什么时候添加了一个新的,所以我可以告诉答案是after_add回调,但我不知道事后如何添加它。

我现在拥有的代码不起作用:

(在宝石中)

工作.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

有什么办法可以做到这一点吗?或者有什么其他方法可以让我知道何时添加了新工作?

4

1 回答 1

0

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

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

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

于 2017-05-12T03:26:46.903 回答