2010-01-31 4 views
2

J'ai un modèle Journey qui a de nombreux utilisateurs (pilotes). Je veux pouvoir avec l'aide de accept_nested_attributes_for ajouter et supprimer des pilotes d'un voyage. Lorsque j'ajoute un pilote, je veux montrer à l'utilisateur < sélectionner > où elle peut sélectionner l'un des utilisateurs pour être l'un des pilotes appartenant à ce voyage particulier. Je suis venu à long:accepte_nested_attributes_for et collection_select comment créer la vue?

# Models 
class Journey < ActiveRecord::Base 
    has_many :drivers 
    accepts_nested_attributes_for :drivers, :allow_destroy => true 
    has_many :users, :through => :drivers 
    accepts_nested_attributes_for :users 
end 

class Driver < ActiveRecord::Base 
    belongs_to :journey 
    belongs_to :user 
end 

class User < ActiveRecord::Base 
    has_many :drivers 
    has_many :journeys, :through => :drivers 
end 

# View _form.html.erb 
<% form_for(@journey) do |f| %> 
    <%= f.error_messages %> 
    <% f.fields_for :drivers do |d| %> 
    <%= render :partial => 'driver', :locals => { :f => d } %> 
    <% end %> 
    <p><%= f.submit 'Submit' %></p> 
<% end %> 

# View _driver.html.erb 
<p><%= f.collection_select(:id, User.all, :id, :name)%></p> 

L'erreur dit:

ActiveRecord::AssociationTypeMismatch in JourneysController#create 
Driver(#2185315860) expected, got Array(#2151950220) 

Je soupçonne que mon _driver.html.erb est mal, mais je ne sais pas comment le résoudre. Pourriez-vous s'il vous plaît m'aider avec quelques conseils ici?

Répondre

3

Votre _driver.html.erb devrait ressembler à ceci:

<%= f.collection_select(:user_id, User.all, :id, :name) %> 

Mais je ne suis pas sûr si cela provoque l'erreur.

Aussi quand j'utilise accepts_nested_attributes_for pour les modèles imbriqués, je le fais de cette façon:

# Models 
class Journey < ActiveRecord::Base 
    has_many :drivers 
    accepts_nested_attributes_for :drivers, :allow_destroy => true 
    has_many :users, :through => :drivers 
end 

class Driver < ActiveRecord::Base 
    belongs_to :journey 
    belongs_to :user 
    accepts_nested_attributes_for :users 
end 

vous pouvez avoir des formes comme celle-ci:

<% form_for @journey do |f| %> 
    <% fields_for :drivers do |d| %> 
     <% fields_for :user do |u| %> 
     <%= u.text_field :name %> 
     ... 
     <% end %> 
    <% end %> 
<% end %> 
+0

Merci! C'était le problème, et maintenant il est réparé :) – Jeena

Questions connexes