2011-09-15 9 views
6

Non riesco a ottenere inverse_of per lavorare sui modelli di join alla creazione. Non sono sicuro se questo sia un bug o semplicemente non implementato come tale. Ho i seguenti modelli:ActiveRecord: inverse_of non funziona su has_many: attraverso il modello join su create

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 è un attributo virtuale di mia challenge, e mi piacerebbe accedere a questi nel modello group_challenges quando viene creato tale associazione. Non riesco a farlo funzionare. Ecco un esempio:

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

Tuttavia inverse_of funziona quando i modelli vengono ricaricati

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

Qualcuno sa se questa è solo una limitazione di progettazione di inverse_of o piuttosto un bug nell'implementazione?

+0

Ho lo stesso problema. – rafamvc

risposta

17

Come per il active record api 3.2.1: "In questo momento: inverse_of supporta has_one e has_many (ma non il: attraverso varianti). Associazioni Fornisce anche il supporto per le associazioni inverse belongs_to dove l'inverso è un has_one e non è un polimorfico."

+2

oh bene, non ho mai notato quella documentazione. Peccato, sarebbe così comodo !! – brad

Problemi correlati