Rails - 绑定与不绑定rails集合选择

时间:2013-05-09 01:46:00

标签: ruby-on-rails

所以当我将一个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}) %>

工作正常。

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

1 个答案:

答案 0 :(得分:1)

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

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

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

FormOptionsHelper#collection_select vs FormBuilder#collection_select

特别注意所提供的论据。值得注意的是FormBuilder基本上delegates this work到模板(即FormOptionsHelper)并根据需要调整参数。