2011-12-30 37 views
27

我有這樣的form_for:更改HTML表單ID軌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" %> 

產生下一個代碼的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> 

如果我有許多形式在同一個頁面是不是html與相同的ID有效。

  • 爲的form_for的ID生成ID = 「new_comment」
  • 的文字區域的ID生成ID = 「COMMENT_CONTENT」

隨着在同一個頁面,以便多種形式無效HTML。

如何通過form_for方法助手從rails 3.1更改id autogenerate?

回答

61

添加到什麼拾音說,最簡單的方法,使獨特形式的ID有關的職位將在id屬性使用後的ID號,像這樣:

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

如何處理文本區域ID? ID = 「COMMENT_CONTENT」?謝謝 – hyperrjas 2011-12-30 18:48:47

+0

例如,對於文本區域或按鈕,字段...等,例如':id =>「text _#{post.id}」。 – hyperrjas 2011-12-30 19:00:38

+0

你會做同樣的事情,但是用'text_area'將它傳遞給':html => {}'是不必要的。如'<%= f.text_area:content,:cols => 10,:rows => 1,:id =>「comment_on _#{post.id} _content」%>'。查看rails的文檔[text_area表單助手](http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-text_area)。 – Batkins 2011-12-30 19:00:56

13

你應該能夠設置窗體的ID爲任何你想要的。喜歡的東西:

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

或1.9.3語法: <%=的form_for @user,HTML:{ID: 「註冊」}做| F | %> – 2013-04-28 10:19:00

13

我認爲:namespace選項是你要找的。

它將名稱附加到表單的ID 以及所有輸入和標籤字段。

e.g

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

會產生:

表單ID = NAMESPACE_new_comment

textarea的ID = NAMESPACE_comment_content

docs

:namespace - 表單的名稱空間,用於確保表單元素上的id爲 屬性的唯一性。命名空間屬性將所生成的HTML ID作爲前綴 以下劃線

+4

這是正確的答案,Rails已經包括命名空間選項,特別是對於這種用例。 – user2076066 2015-12-28 10:39:55

+0

我同意。這應該是答案。 – fatuhoku 2016-07-18 13:37:21