更改form_for rails 3.1生成的html表单ID

时间:2022-07-31 00:13:15

I have this form_for:

我有这个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"  %>

That generate the next code html:

那会生成下一个代码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>

If I have many forms in a same page is not a html valid with the same id.

如果我在同一页面中有多个表单,则不是具有相同ID的html有效。

  • The id for form_for generate id="new_comment"
  • form_for的id生成id =“new_comment”
  • The id for textarea generate id="comment_content"
  • textarea的id生成id =“comment_content”

With so many forms in a same page is not valid html.

在同一页面中有这么多表单是无效的HTML。

How can I change the id autogenerate by form_for method helper from rails 3.1?

如何通过rails 3.1中的form_for方法助手更改id autogenerate?

3 个解决方案

#1


68  

Adding on to what miked said, the easiest way to make unique form id's for the posts would be to use the post's id numbers in the id attribute, like so:

添加到miked所说的,为帖子制作唯一表单id的最简单方法是在id属性中使用post的id号,如下所示:

<%= form_for [post, Comment.new,], :remote => true, :html => { :id => "new_comment_on_#{post.id}" } do |f| %>

#2


16  

I think the :namespace option is what you're looking for.

我认为:namespace选项是你正在寻找的。

It appends the name to the form's id as well as all input and label fields.

它将名称附加到表单的id以及所有输入和标签字段。

e.g

例如

<%= form_for [post, Comment.new,], namespace: 'NAMESPACE', :remote => true do |f| %>
    <%= f.text_area :content, :cols =>10, :rows => 1%>
<% end %>

Would generate:

会产生:

Form id = NAMESPACE_new_comment

表单id = NAMESPACE_new_comment

Textarea id = NAMESPACE_comment_content

Textarea id = NAMESPACE_comment_content

From the docs:

来自文档:

:namespace - A namespace for your form to ensure uniqueness of id attributes on form elements. The namespace attribute will be prefixed with underscore on the generated HTML id

:namespace - 表单的命名空间,用于确保表单元素上id属性的唯一性。 namespace属性将在生成的HTML id上以下划线为前缀

#3


14  

You should be able to set the form's id to whatever you want. Something like:

您应该能够将表单的ID设置为您想要的任何内容。就像是:

<%= form_for @object, :html=> {:id => 'custom_form_id'} do |f| %>

#1


68  

Adding on to what miked said, the easiest way to make unique form id's for the posts would be to use the post's id numbers in the id attribute, like so:

添加到miked所说的,为帖子制作唯一表单id的最简单方法是在id属性中使用post的id号,如下所示:

<%= form_for [post, Comment.new,], :remote => true, :html => { :id => "new_comment_on_#{post.id}" } do |f| %>

#2


16  

I think the :namespace option is what you're looking for.

我认为:namespace选项是你正在寻找的。

It appends the name to the form's id as well as all input and label fields.

它将名称附加到表单的id以及所有输入和标签字段。

e.g

例如

<%= form_for [post, Comment.new,], namespace: 'NAMESPACE', :remote => true do |f| %>
    <%= f.text_area :content, :cols =>10, :rows => 1%>
<% end %>

Would generate:

会产生:

Form id = NAMESPACE_new_comment

表单id = NAMESPACE_new_comment

Textarea id = NAMESPACE_comment_content

Textarea id = NAMESPACE_comment_content

From the docs:

来自文档:

:namespace - A namespace for your form to ensure uniqueness of id attributes on form elements. The namespace attribute will be prefixed with underscore on the generated HTML id

:namespace - 表单的命名空间,用于确保表单元素上id属性的唯一性。 namespace属性将在生成的HTML id上以下划线为前缀

#3


14  

You should be able to set the form's id to whatever you want. Something like:

您应该能够将表单的ID设置为您想要的任何内容。就像是:

<%= form_for @object, :html=> {:id => 'custom_form_id'} do |f| %>