2011-12-30 20 views
27

tengo unas pocas cosas form_for:Cambio formulario HTML ID generado por form_for carriles 3.1

<%= form_for [post, Comment.new,], :remote => true do |f| %> 
<%= f.text_area :content, :cols =>10, :rows => 1%> 
<% end %> 
<%= f.submit :class => "input_comment" %> 

que generan el código HTML siguiente:

<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> 

Si tengo muchas formas en una misma página no es una html válido con el mismo id.

  • el ID para form_for generar id = "new_comment"
  • el identificador de área de texto genera id = "COMMENT_CONTENT"

Con tantas formas en una misma página no es válida html.

¿Cómo puedo cambiar el id autogenerado por form_for method helper from carriles 3.1?

Respuesta

61

Añadiendo a lo miked Dicho esto, la manera más fácil de hacer únicas de la forma de identificación de los puestos sería utilizar números de identificación del puesto en el atributo id, así:

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

¿Cómo funciona el ID de área de texto? id = "comment_content"? Gracias – hyperrjas

+0

Para área de texto o botón, campo ... etc como ': id =>" text _ # {post.id} "' por ejemplo. – hyperrjas

+0

Haría lo mismo, pero con 'text_area' no es fácil pasarlo dentro de': html => {} '. Como en '<% = f.text_area: content,: cols => 10,: rows => 1,: id =>" comment_on _ # {post.id} _content "%>'. Verifique los documentos para [text_area form helper] (http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-text_area) para rails. – Batkins

13

Debería poder establecer el id del formulario a lo que desee. Algo así como:

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

o 1.9.3 Sintaxis: <% = form_for @user, html: {id: "registro"} do | f | %> –

13

Creo que la opción :namespace es lo que estás buscando.

Añade el nombre al ID del formulario y todos los campos de entrada y etiqueta.

por ejemplo

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

generaría:

form id = NAMESPACE_new_comment

Textarea id = NAMESPACE_comment_content

Desde el docs:

: espacio de nombres: un espacio de nombre para su formulario para garantizar la exclusividad de los atributos id en los elementos del formulario. El atributo de espacio de nombres se usará como prefijo con subrayado en la Identificación del HTML generado

+4

Esta es la respuesta correcta, Rails ha incluido la opción de espacio de nombres especialmente para este caso de uso. – user2076066

+0

Estoy de acuerdo. Esta debería ser la respuesta. – fatuhoku

Cuestiones relacionadas