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

时间:2010-03-11 14:29:10

标签: ruby-on-rails

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

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

我可以使用表单(或其他东西)上的:prefix选项来解决这个问题吗?

更新:
(一些代码)

    //_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 %>

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

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

2 个答案:

答案 0 :(得分:2)

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

修改

有关object_id_attribute的文档含糊不清。 :index确实会对表单提交产生影响。解决方案是为每个字段指定:index属性。这将更改:id属性,使id不受影响(这是提交的重要性)。

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

name

答案 1 :(得分:1)

使用collection.each_with_index do |item, i|迭代它们然后在局部变量中的渲染部分传递:

render :partial => "some_partial", :locals => {:form_id => "form_id_#{i}"}

然后在部分内容中,您可以访问<%= form_id %>

这将是一种方法。

我假设你在remote_form_for中可以传入:id =&gt; form_id或:html_options =&gt; {:id =&gt; form_id}

看起来你可以,看看: http://api.rubyonrails.org/classes/ActionView/Helpers/PrototypeHelper.html#M001649