我希望在一个页面上有两个几乎相同的表单,并使用partial来生成两个渲染调用。
<%= render 'form_template', data: @categories_one %>
<%= render 'form_template', data: @categories_two %>
问题在于它们唯一的区别 - 两种形式都使用f.collection_select为Dropbox提供用户类别。
<%= f.collection_select :category_id, data, :id, :name %>
为SELECT标记创建两个具有相同ID的不同表单,打破我的表单,我想避免这种情况。但是我该怎么做呢?
答案 0 :(得分:2)
您可以将:namespace
参数传递给form_for
表单的命名空间,以确保表单元素上id属性的唯一性。 namespace属性将在生成的HTML id上以下划线为前缀。
答案 1 :(得分:1)
如果查看collection_select
的{{3}},您会看到其最后一个参数是针对HTML选项的。所以你可以这样做:
<%= f.collection_select :category_id, data, :id, :name, {}, {:id => "different_css_id"} %>
因为你说这是在部分内部调用的,所以你可以从相同的渲染调用中传递一个变量来切换这种行为。
# Render calls
<%= render 'form_template', data: @categories_one %>
<%= render 'form_template', data: @categories_one, :locals => {:use_other_id => true} %>
然后在你的部分中使用那个标志。