0

因此,当我将 collection_select 附加到我的 form_for 对象时遇到错误,如下所示:

<%= f.collection_select(:city_id,  @cities,  :id, :name, {:prompt   => "Select a City"}, {:id => 'cities_select', multiple: true}) %>

并得到错误:

undefined local variable 'city_id'

但是当我不像这样绑定选择时:

<%= collection_select(nil, :city_id,  @cities,  :id, :name, {:prompt   => "Select a City"}, {:id => 'cities_select', multiple: true}) %>

它工作正常。

我只是想了解为什么一个有效而另一个无效背后的理论?

4

1 回答 1

1

我认为让你绊倒的主要是你对这里发生的事情的概念。

通过调用表单助手对象上的方法,没有任何东西可以“绑定”任何东西。有一些表单辅助方法,例如collection_select,可用于构建 HTML 元素。有些表单构建器有方法,比如collection_select为绑定到对象的表单构建 HTML 表单元素。

您在这里遇到的问题是FormOptionsHelper#collection_select方法和FormBuilder#collection_select方法不是同一个方法并且不接受相同的参数:

FormOptionsHelper#collection_select vs FormBuilder#collection_select

特别注意提供的论点。还值得注意的是,FormBuilder基本上将这项工作委托给模板(即FormOptionsHelper)并根据需要调整参数。

于 2013-05-09T01:58:37.133 回答