Ruby on Rails:通过collection_select提交引用另一个控制器的表单

时间:2010-08-02 19:52:39

标签: ruby-on-rails

今天是我正在研究Ruby on Rails的第一天,现在我被卡住了。我有两个脚手架artistsong

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 个答案:

答案 0 :(得分:1)

我认为这应该是:

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

第二个参数是要在创建/更新的模型中分配的方法。因此,在您的控制器中,将使用params[:song][:artist_id]

从params哈希中检索该值

详细说明可在“{3}”下的“collection_select”

下找到