2011-09-15 18 views
6

No puedo obtener inverse_of para trabajar en la creación de modelos de unión. No estoy seguro si esto es un error o simplemente no se implementó como tal. Tengo los modelos siguientes:ActiveRecord: Inverse_of no funciona en has_many: en el modelo de unión en crear

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 es un atributo virtual de mi challenge, y me gustaría acceder a estos en el modelo group_challenges cuando se crea dicha asociación. No puedo conseguir que funcione. He aquí un ejemplo:

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

Sin embargo inverse_of funciona cuando se vuelven a cargar los modelos

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

¿alguien sabe si esto es sólo una limitación de diseño de inverse_of o más bien un error en la implementación?

+0

Tengo el mismo problema. – rafamvc

Respuesta

17

Según el active record api 3.2.1: "En la actualidad: inverse_of apoya has_one y has_many (pero no la: a través de variantes). Asociaciones También proporciona apoyo a las asociaciones inversa belongs_to donde el inverso es un has_one y no es una polimórfico."

+2

oh bueno, ya nunca me di cuenta de esa documentación. ¡Qué lástima, sería tan útil! – brad

Cuestiones relacionadas