Ruby on Rails: отправка формы со ссылкой на другой контроллер через collection_select - PullRequest
0 голосов
/ 02 августа 2010

Сегодня первый день, когда я изучаю Ruby on Rails, и теперь я застрял. У меня есть два помоста, artist и song.

В songs/new.html.erb у меня есть следующие строки:

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

В форме для создания новой песни я хочу список <select> со всеми исполнителями. Использование кода выше работает нормально. Форма создана так, как я хочу, а художники указаны в списке. Однако при отправке новой песни я получаю эту ошибку:

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

Сгенерированный HTML-код для выбора выглядит следующим образом:

<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>

Полагаю, второй последний параметр для collection_select() неверен, но каким он должен быть?

1 Ответ

1 голос
/ 03 августа 2010

Я думаю, это должно быть:

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

Второй параметр - это метод, который будет назначен в создаваемой / обновляемой модели. Таким образом, в вашем контроллере значение будет извлечено из хэша params с params[:song][:artist_id]

Подробное объяснение можно найти в документации Rails API в разделе "collection_select"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...