代码之家  ›  专栏  ›  技术社区  ›  Johan

rubyonrails:通过collection\u select提交一个引用另一个控制器的表单

  •  0
  • Johan  · 技术社区  · 15 年前

    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)
    

    为select生成的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 回复  |  直到 15 年前
        1
  •  1
  •   zetetic    15 年前

    我认为这应该是:

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

    params[:song][:artist_id]

    详细解释见 Rails API docs