web-dev-qa-db-ja.com

form_for Rails 3.1によって生成されたHTMLフォームIDを変更します

私はこの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"  %>

次のコード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>

同じページに多くのフォームがある場合、同じIDで有効なhtmlではありません。

  • Form_for generateのid id = "new_comment"
  • Textarea generateのid id = "comment_content"

同じページに非常に多くのフォームがある場合、htmlは無効です。

form_forメソッドヘルパーによる自動生成IDをRails 3.1?

38
hyperrjas

Mikedの発言に加えて、投稿の一意のフォームIDを作成する最も簡単な方法は、次のようにid属性で投稿のID番号を使用することです。

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

私は思います :namespaceオプションはあなたが探しているものです。

フォームのidに名前を追加し、すべての入力フィールドとラベルフィールドを追加します。

例えば

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

生成します:

フォームID = NAMESPACE_new_comment

テキストエリアID = NAMESPACE_comment_content

docs から:

:namespace-フォーム要素のid属性の一意性を保証するフォームの名前空間。生成されたHTML IDの名前空間属性の前にアンダースコアが付けられます

17
Subtletree

フォームのIDを任意に設定できるはずです。何かのようなもの:

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