Rails - 如何呈现两个相同的表单,但具有不同的元素ID?

时间:2013-12-10 15:44:29

标签: ruby-on-rails ruby-on-rails-4

我希望在一个页面上有两个几乎相同的表单,并使用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的不同表单,打破我的表单,我想避免这种情况。但是我该怎么做呢?

2 个答案:

答案 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} %>

然后在你的部分中使用那个标志。