所以当我将一个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}) %>
工作正常。
我只是想了解为什么一个有效而另一个无效的理论?
答案 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
)并根据需要调整参数。