我有这个form_for:
<%= form_for [post, Comment.new,], :remote => true do |f| %>
<%= f.text_area :content, :cols =>10, :rows => 1%>
<% end %>
<%= f.submit :class => "input_comment" %>
生成下一个代码html:
<form method="post" id="new_comment" data-remote="true" class="new_comment"
action="/post/4efcda9e1d41c82486000077/comments" accept-charset="UTF-8"><div
style="margin:0;padding:0;display:inline"><input type="hidden" value="✓" name="utf8">
<input type="hidden" value="ctVfDF/O4FIR91I7bC5MVezQmutOCkX3dcXe73uNPZY=" name="authenticity_token">
<textarea rows="1" name="comment[content]" id="comment_content" cols="10"></textarea>
<input type="submit" value="Create Comment" name="commit" class="input_comment">
</form>
如果我在同一页面中有多个表单,则不是具有相同ID的html。
在同一页面中有这么多表单是无效的HTML。
如何通过rails 3.1中的form_for方法助手更改id自动生成?
答案 0 :(得分:74)
添加到miked所说的内容,为帖子制作唯一表单ID的最简单方法是在id属性中使用帖子的id号,如下所示:
<%= form_for [post, Comment.new,], :remote => true, :html => { :id => "new_comment_on_#{post.id}" } do |f| %>
答案 1 :(得分:17)
我认为:namespace
选项正是您所需要的。
它将名称附加到表单的ID 以及所有输入和标签字段。
例如
<%= form_for [post, Comment.new,], namespace: 'NAMESPACE', :remote => true do |f| %>
<%= f.text_area :content, :cols =>10, :rows => 1%>
<% end %>
会生成:
表单ID = NAMESPACE_new_comment
Textarea id = NAMESPACE_comment_content
来自docs:
:namespace - 表单的命名空间,以确保id的唯一性 表单元素上的属性。 namespace属性将以前缀为前缀 在生成的HTML ID上加下划线
答案 2 :(得分:15)
您应该可以将表单的ID设置为您想要的任何内容。类似的东西:
<%= form_for @object, :html=> {:id => 'custom_form_id'} do |f| %>