2017-05-11 1 views
1

연관은 has_and_belongs_to_many이며 보석으로 정의됩니다. 나는 새로운 것을 추가 할 때 이것을 알고 싶다. 대답을 말할 수있는 것은 after_add callback이지만, 사실 후에 어떻게 추가 할지를 알 수 없다. 지금이모델 데코레이터의 루비 연결에`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 후크에 코드를 넣으십시오.

레일즈 워드 프로세서에서 "가장 간단한 방법은 관계 모델을 독립 엔터티로 사용해야하는 경우 has_many :through 관계를 설정해야한다는 것입니다."

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

관련 문제