我有一个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怎么样,因为控制器正在寻找特定的命名控件?
答案 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