2010-09-21 8 views
5

¿Cómo puedo usar accept_nested_attributes_for helper de ActiveRecord en una asociación has_many: through al agregar atributos a la tabla de unión?accept_nested_attributes_for a través de la tabla de unión con atributos en la combinación

Por ejemplo, dicen que tengo un modelo del equipo:

class Team < ActiveRecord::Base 
    role = Role.find_by_name('player') 
    has_many :players, 
      :through => :interactions, 
      :source  => :user, 
      :conditions => ["interactions.role_id = ?", role.id] do 
       class_eval do 
       define_method("<<") do |r|                
        Interaction.send(:with_scope, :create => {:role_id => role.id}) { self.concat r } 
       end 
       end 
      end 
end 

El equipo has_many players través interactions, ya que un usuario puede ocupar varios roles (jugador, manager, etc.).

¿Cómo puedo usar accepts_nested_attributes_for al mismo tiempo que agrego atributos a la tabla de unión?

Si tengo un récord del equipo existente team y un registro de usuario existente user, puedo hacer algo como esto:

team.players << user 
team.players.size 
=> 1 

Pero si creo un nuevo equipo con un jugador anidada:

team = Team.create(:name => "New York Lions", 
        :players_attributes => [{:name => 'John Doe'}]) 
team.players.size 
=> 0 

En ese último ejemplo, se crean los registros de equipo, usuario e interacción (y el equipo tiene al usuario a través de interacciones), pero el atributo interactions.role_id no se establece aquí.

+0

¿Alguna vez resolvió este problema? –

+1

la respuesta a su pregunta se puede encontrar en esta publicación: http://stackoverflow.com/questions/2182428/rails-nested-form-with-has- many-through-how-to-edit-attributes-of-join -modelo –

Respuesta

2
class Team < ActiveRecord::Base 
    accepts_nested_attributes_for :interactions 

class Interaction < ActiveRecord::Base 
    accepts_nested_attributes_for :players 


team = Team.create(:name => "New York Lions", :interactions_attribues => [{ 
        :players_attributes => [{:name => 'John Doe'}]}]) 

no he comprobado el crear de manera pueden tener los arrays y hashes un poco en mal estado pero se entiende la idea. Necesita los atributos accept_nested_attributes en el equipo y los modelos de interacción.

Cuestiones relacionadas