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.
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?
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| %>
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é
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| %>