2011-12-30 10 views
27

ho questo form_for:Cambio modulo HTML id generato dalla form_for rotaie 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" %> 

che generano il codice successivo 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> 

Se ho molte forme in una stessa pagina non è un html valido con lo stesso id.

  • l'ID per form_for generare id = "new_comment"
  • l'ID per textarea generare id = "COMMENT_CONTENT"

Con così tante forme in una stessa pagina non è valido html.

Come posso modificare l'autogenerazione di id da form_for helper metodo da rails 3.1?

risposta

61

Aggiungendo a ciò microfonato detto, il modo più semplice per rendere unico modulo di identificazione di per i posti sarebbe quella di utilizzare i numeri ID di un articolo, nel l'attributo id, in questo modo:

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

Come funziona per l'ID dell'area di testo? id = "COMMENT_CONTENT"? Grazie – hyperrjas

+0

Per area di testo o pulsante, campo ... ecc come così ': id =>" text _ # {post.id} "' per esempio. – hyperrjas

+0

Si farebbe la stessa cosa, ma con un 'text_area' è inutile passarlo dentro': html => {} '. Come in '<% = f.text_area: content,: cols => 10,: rows => 1,: id =>" comment_on _ # {post.id} _content "%>'. Controlla i documenti per [helper forma text_area] (http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-text_area) per i binari. – Batkins

13

Dovresti essere in grado di impostare l'ID del modulo in base a ciò che desideri. Qualcosa di simile:

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

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

13

Penso che l'opzione :namespace sia ciò che stai cercando.

Aggiunge il nome all'id del modulo nonché a tutti i campi di input e di etichetta.

es

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

genererebbe:

Modulo id = NAMESPACE_new_comment

Textarea id = NAMESPACE_comment_content

Dal docs:

: namespace - Uno spazio dei nomi per il modulo per garantire l'univocità degli attributi id sugli elementi del modulo. L'attributo namespace sarà preceduto con sottolineatura sul id HTML generato

+4

Questa è la risposta giusta, Rails ha incluso l'opzione namespace in particolare per questo caso d'uso. – user2076066

+0

Sono d'accordo. Questa dovrebbe essere la risposta. – fatuhoku

Problemi correlati