2014-09-18 4 views
3

I ont des résultats nichés sur les matchs comme celui-ciAssociation active Record Type Mismatch

/matches/16/résultats/13/modifier

Là où j'ai le champ de sélection suivant, cela montre les informations correctes (équipe. nom et son team.id)

<%= f.collection_select :winner, @select_winner_loser, :id, :name %> 

maintenant, lorsque je tente de modifier mon résultat et la sélection d'un gagnant je reçois ceci:

ActiveRecord :: AssociationTypeMismatch Team (# 10504340) expected, got Chaîne (# 6163240)

"Élevé lorsqu'un objet affecté à une association a un type incorrect."http://api.rubyonrails.org/classes/ActiveRecord/AssociationTypeMismatch.html

Winner est une équipe objet, result.rb ressemble à ce

class Result < ActiveRecord::Base 
    has_one :match 
    belongs_to :winner, class_name: "Team" 
    belongs_to :loser, class_name: "Team" 
end 

@select_winner_loser vient de mon results_controller

def edit 
    @select_winner_loser = [] 
    @select_winner_loser << @match.top 
    @select_winner_loser << @match.bottom 
    end 

Match.top & fond est aussi l'équipe objets

class Match < ActiveRecord::Base 
    belongs_to :top, class_name: "Team" 
    belongs_to :bottom, class_name: "Team" 
    ... 
    belongs_to :result 
end 

Je ne vois pas pourquoi j'obtiendrais cela puisque j'ai les bons objets dans mon champ de sélection, des idées?

Merci

Répondre

12

Changer

<%= f.collection_select :winner, @select_winner_loser, :id, :name %> 

à

<%= f.collection_select :winner_id, @select_winner_loser, :id, :name %> 

et vos paramètres autorisés en conséquence. Rails crée un objet Team lorsqu'il voit le _id dans le nom.

+1

Merci lunr :), a dû changer mon fichier de migration, j'ai eu le gagnant au lieu de winner_id dans mon db et fait le changement que vous avez indiqué. – Pierre

Questions connexes