2011-09-15 33 views
6

Tôi không thể nhận được inverse_of để làm việc trên các mô hình kết hợp khi tạo. Tôi không chắc chắn nếu đây là một lỗi hoặc chỉ không thực hiện như vậy. Tôi có các mô hình sau:ActiveRecord: inverse_of không hoạt động trên has_many: thông qua trên mô hình tham gia tạo

class Challenge < ActiveRecord::Base 
    has_many :groups, :through => :group_challenges 
    has_many :group_challenges, :inverse_of => :challenge 

    attr_accessor :contact_ids 
end 

class GroupChallenge < ActiveRecord::Base 
    belongs_to :challenge, :inverse_of => :group_challenges 
    belongs_to :group, :inverse_of => :group_challenges 

    before_save :check_challenge 

    def check_challenge 
    Rails.logger.debug("challenge.contact_ids: #{challenge.contact_ids}") 
    end 
end 

class Group < ActiveRecord::Base 
    has_many :challenges, :through => :group_challenges 
    has_many :group_challenges, :inverse_of => :group 
end 

contact_ids là một thuộc tính ảo của challenge của tôi, và tôi muốn truy cập những trong mô hình group_challenges khi hiệp hội được tạo ra. Tôi không thể có được nó để làm việc. Dưới đây là một ví dụ:

challenge = Challenge.new :groups => Group.all, :contact_ids => [1,2,3] 
# log output => challenge.contact_ids: [] 

Tuy nhiên inverse_of làm việc khi các mô hình được nạp lại

challenge.reload 
challenge.group_challenges.first.challenge.contact_ids 
# log output => challenge.contact_ids: [1,2,3] 

Có ai biết nếu điều này chỉ là một giới hạn thiết kế của inverse_of hay đúng hơn là một lỗi trong việc thực hiện?

+0

Tôi gặp vấn đề tương tự. – rafamvc

Trả lời

17

Theo active record api 3.2.1: "Hiện nay: inverse_of hỗ trợ has_one và has_many (nhưng không phải là: thông qua các biến thể). Hiệp hội này cũng cung cấp hỗ trợ ngược cho các hiệp hội belongs_to nơi nghịch đảo là một has_one và nó không phải là một đa hình. "

+2

ồ tốt, tôi chưa bao giờ nhận thấy tài liệu đó. Quá tệ, nó sẽ rất tiện dụng !! – brad

Các vấn đề liên quan