2011-09-15 8 views
6

Nie mogę uzyskać inverse_of do pracy nad modelami łączenia podczas tworzenia. Nie jestem pewien, czy jest to błąd, czy po prostu nie zaimplementowany jako taki. Mam następujące modele:ActiveRecord: inverse_of nie działa na has_many: przez na modelu łączenia na tworzenie

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 jest wirtualny atrybut z moich challenge, i chciałbym, aby uzyskać do nich dostęp w modelu group_challenges gdy stowarzyszenie jest tworzony. Nie mogę zmusić go do działania. Oto przykład:

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

Jednak inverse_of działa, gdy modele są przeładowane

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

Czy ktoś wie, czy jest to po prostu ograniczenie konstrukcja inverse_of czy raczej błąd w realizacji?

+0

Mam ten sam problem. – rafamvc

Odpowiedz

17

jak na active record api 3.2.1: „Aktualnie inverse_of obsługuje has_one i has_many (ale nie poprzez wariantach:). Stowarzyszenia dostarcza również odwrotną wsparcie dla asocjacji, gdzie jest to odwrotność has_one i nie jest to polimorficzny."

+2

o dobry, tak, nigdy nie zauważyłem tej dokumentacji. Szkoda, byłoby to bardzo przydatne !! – brad

Powiązane problemy