web-dev-qa-db-fra.com

Changer l'identifiant de formulaire html généré par form_for Rails 3.1

J'ai ce 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"  %>

Cela génère le code html suivant:

<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 j'ai plusieurs formulaires sur une même page, ce n'est pas un html valide avec le même identifiant.

  • L'identifiant pour form_for generate id = "new_comment"
  • L'identifiant de la zone de texte génère id = "comment_content"

Avec autant de formulaires dans une même page, ce n'est pas du HTML valide.

Comment puis-je changer l'ID de génération automatique par l'aide de la méthode form_for de Rails 3.1?

38
hyperrjas

Pour ajouter à ce que miked a dit, la façon la plus simple de créer des identifiants de formulaire uniques pour les publications serait d'utiliser les numéros d'identification de la publication dans l'attribut id, comme suit:

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

Je pense que le :namespace l'option est ce que vous recherchez.

Il ajoute le nom à l'ID du formulaire ainsi que tous les champs d'entrée et d'étiquette.

par exemple

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

Générerait:

ID de formulaire = NAMESPACE_new_comment

ID de zone de texte = NAMESPACE_comment_content

De la docs :

: namespace - Un espace de noms pour votre formulaire afin de garantir l'unicité des attributs id sur les éléments du formulaire. L'attribut namespace sera préfixé avec un trait de soulignement sur l'ID HTML généré

17
Subtletree

Vous devriez pouvoir définir l'ID du formulaire comme vous le souhaitez. Quelque chose comme:

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