Rails collection_select不起作用,但使用options_from_collection_for_select进行等效选择

时间:2011-08-10 07:14:47

标签: ruby-on-rails select merge nomethoderror

以下是我的代码段完全符合预期:

<%= f.select(:other_model_id, 
             options_from_collection_for_select(
               OtherModel.all, 
               :id, 
               :full_name,
               { :selected => @this_model.other_model_id} )) %>

但出于某种原因,这不起作用:

<%= f.collection_select :this_model, :other_model_id, 
                         OtherModel.all, :id, :full_name %>

我得到的错误是:

  

未定义的方法`merge'for:full_name:Symbol

有什么建议吗?事实是:full_name与工作代码一起正常工作使我相信我搞砸了简化的collection_select代码中的语法,并且问题不在其他地方。

1 个答案:

答案 0 :(得分:3)

我认为你混合了两种不同的collection_select方法。您使用FormBuilder#collection_select参数调用FormOptionsHelper#collection_select。也许你想要这个:

<%= f.collection_select :other_model_id, OtherModel.all, :id, :full_name %>

或许这个:

<%= collection_select :this_model, :other_model_id, OtherModel.all, :id, :full_name %>

你最终试图将:full_name置于options参数中,但这应该是一个哈希,这就是关于“不merge方法”的投​​诉来自的地方。