同一页面上的多个remote_form_for会导致重复的ID

Ben*_*man 6 ruby-on-rails

我有一个rails应用程序,显示一个名为modules的项目列表.我正在迭代这些,为每个包含remote_form_for调用的部分呈现部分.

这一切都有效,但HTML验证失败,因为我的表单文本字段都具有相同的ID.

表单上有一个:前缀选项(或其他东西)我可以用它来解决这个问题吗?

更新:(
一些代码)

    //_module_form.html.erb
    <% remote_form_for app_module do |f| %>
         <%= f.label :name %>
         <%= f.text_field :name %>
         <%= submit_tag 'Save' %>
    <%end %>

    //parent page
    <% @thing.modules.each do |app_module| %>
       <%= render :partial => "module_form", :locals => { :app_module => app_module } %>
    <% end %>
Run Code Online (Sandbox Code Playgroud)

因此,如果我在集合中有多个项目,我会在同一页面上呈现相同的表单,并且表单ID和文本框ID是重复的.

我可以很容易地自定义表单ID,但是text_box怎么样,因为控制器正在寻找特定的命名控件?

shm*_*ael 2

:index => object.id创建表单时将其添加到选项哈希中。这应该以 的形式生成 id,object_id_attribute而不会干扰控制器。

编辑

有关的文档:index具有含糊的误导性。:index确实对表单提交有影响。解决方案是指定:id每个字段的属性。这将改变id财产,保持name完好无损(这对提交来说很重要)。

以下是我在通用帮助程序中用于生成这些字段的代码:

def create_field( f, field_type, object, field_name )
    field_id = "#{object.class.name.downcase}_#{object.id.to_s}_#{field_name.to_s}"
    f.send( field_type, field_name, :id => field_id )
end
Run Code Online (Sandbox Code Playgroud)