2010-08-02 2 views
0

Aujourd'hui est le premier jour où je regarde Ruby on Rails, et maintenant je suis coincé. J'ai deux échafaudages, artist et song.Ruby on Rails: Soumettre un formulaire se référant à un autre contrôleur via collection_select

En songs/new.html.erb, j'ai ces lignes:

... 
<%= f.label :name %><br /> 
<%= f.text_field :name %> 
... 
<%= f.label :Artist %> 
<%= collection_select(:song, :Artist, @artists, :id, :sort_name) %> 
... 

Dans la forme pour la création d'une nouvelle chanson, je veux une liste <select> avec tous les artistes. L'utilisation du code ci-dessus fonctionne bien. Le formulaire est créé comme je le veux, et les artistes sont répertoriés. Cependant, lors de la présentation de la nouvelle chanson, je reçois cette erreur:

Artist(#69916999335860) expected, got String(#69917057438720) 

Le code HTML généré pour les regards de sélection comme ceci:

<select id="song_Artist" name="song[Artist]"> 
    <option value="1">Vreeswijk, Cornelis</option> 
    <option value="2">De lyckliga kompisarna</option> 
    <option value="3">Wiehe, Mikael</option> 
    <option value="4">Demian, Lars</option> 
    <option value="5">Sundström, Stefan</option> 
</select> 

Je suppose que le second dernier paramètre pour collection_select() est faux, mais que devrait-il être?

Répondre

1

Je pense que cela devrait être:

<%= collection_select(:song, :artist_id, @artists, :id, :sort_name) %> 

Le deuxième paramètre est la méthode à attribuer dans le modèle en cours de création/mise à jour. Donc, dans votre contrôleur la valeur serait récupérée à partir du hachage params avec params[:song][:artist_id]

Une explication détaillée peut être trouvée dans le Rails API docs sous « collection_select »

+0

Merci! Quel est ton numéro de téléphone? ;) – Johan

Questions connexes