2010-08-02 56 views
0

今天是我看着Ruby on Rails的第一天,现在我被卡住了。我有两个脚手架,artistsongRuby on Rails:通过collection_select提交指向另一个控制器的表单

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

我认为这应该是:

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

第二个参数是正在创建更新模型中的要分配的方法/。因此,在你的控制器中的值会从params哈希表中检索与params[:song][:artist_id]

的详细说明可在Rails API docs下的“collection_select”

+0

由于发现!你的电话号码是什么? ;) – Johan 2010-08-02 20:36:19

相关问题