Reputation: 5053
Today is the first day I'm looking into Ruby on Rails, and now I'm stuck. I have two scaffolds, artist
and song
.
In songs/new.html.erb
, I have these lines:
...
<%= f.label :name %><br />
<%= f.text_field :name %>
...
<%= f.label :Artist %>
<%= collection_select(:song, :Artist, @artists, :id, :sort_name) %>
...
In the form for creating a new song, I want a <select>
list with all artists. Using the code above works fine. The form is created as I want it, and the artists are listed. However, when submitting the new song, I get this error:
Artist(#69916999335860) expected, got String(#69917057438720)
The generated HTML code for the select looks like this:
<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>
I guess the second last parameter for collection_select()
is wrong, but what should it be?
Upvotes: 0
Views: 232
Reputation: 47548
I think this should be:
<%= collection_select(:song, :artist_id, @artists, :id, :sort_name) %>
The second parameter is the method to be assigned in the model being created/updated. So in your controller the value would be retrieved from the params hash with params[:song][:artist_id]
A detailed explanation can be found in the Rails API docs under "collection_select"
Upvotes: 1