2017-05-11 10 views
1

関連はhas_and_belongs_to_manyであり、gemで定義されています。私は答えがafter_addコールバックであると言うことができるので、新しいものが追加された時を知る必要がありますが、事後にこれをどのように追加するのか分かりません。`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 

これが動作する方法はありますか?それとも、新しい仕事がいつ追加されるかを私に見いだす他の方法はありますか?

答えて

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

関連する問題