2010-09-21 5 views
5

Comment utiliser l'attribut accepts_nested_attributes_for d'ActiveRecord dans une association has_many: through en ajoutant des attributs à la table de jointure?accepte_nested_attributes_for via la table de jointure avec des attributs sur la jointure

Par exemple, supposons que j'ai un modèle d'équipe:

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 

L'équipe has_many players par interactions, car un utilisateur peut occuper plusieurs rôles (joueur, gestionnaire, etc.).

Comment puis-je utiliser accept_nested_attributes_for tout en ajoutant des attributs à la table de jointure?

Si j'ai un record d'équipe existante team et un enregistrement d'utilisateur existant user, je peux faire quelque chose comme ceci:

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

Mais si je crée une nouvelle équipe avec un joueur imbriqué:

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

Dans ce dernier exemple, les enregistrements d'équipe, d'utilisateur et d'interaction sont créés (et l'interaction de l'utilisateur est assurée par l'utilisateur), mais l'attribut interactions.role_id n'est pas défini ici.

+0

Avez-vous déjà résolu ce problème? –

+1

la réponse à votre question peut être trouvée dans cet article: http://stackoverflow.com/questions/2182428/rails-nested-form-with-has-many-through-how-to-edit-attributes-of-join -modèle –

Répondre

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'}]}]) 

Je n'ai pas vérifié le créer si peut avoir les tableaux et hachages un peu foiré, mais vous voyez l'idée. Vous avez besoin à la fois des attributs accepts_nested_attributes sur l'équipe et des modèles d'interaction.

Questions connexes