2011-12-30 21 views
27

Tôi có form_for này:Thay đổi hình thức html id được tạo ra bởi form_for ray 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" %> 

Đó tạo mã html tiếp theo:

<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> 

Nếu tôi có nhiều hình thức trong một trang tương tự không phải là một html hợp lệ với cùng một id.

  • Các id cho form_for tạo id = "new_comment"
  • Các id cho textarea tạo id = "COMMENT_CONTENT"

Với rất nhiều hình thức trong một trang tương tự không hợp lệ html.

Làm thế nào tôi có thể thay đổi AutoGenerate id bởi form_for phương pháp helper từ đường ray 3.1?

Trả lời

61

Thêm vào những gì MikeD nói, cách dễ nhất để làm cho độc đáo của id hình thức cho các bài viết sẽ được sử dụng số id của bài đăng trong các thuộc tính id, như vậy:

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

Cách hoạt động cho id vùng văn bản? id = "comment_content"? Cảm ơn – hyperrjas

+0

Đối với khu vực văn bản hoặc nút, trường ... v.v ... ví dụ như ': id =>" text _ # {post.id} "'. – hyperrjas

+0

Bạn sẽ làm điều tương tự, nhưng với một 'text_area' nó unecessarry để vượt qua nó trong vòng': html => {} '. Như trong '<% = f.text_area: nội dung,: cols => 10,: rows => 1,: id => "comment_on _ # {} post.id _content" %>'. Kiểm tra các tài liệu cho các [text_area hình thức helper] (http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-text_area) cho đường ray. – Batkins

13

Bạn sẽ có thể thiết lập id của hình thức để bất cứ điều gì bạn muốn. Một cái gì đó như:

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

hoặc 1.9.3 cú pháp: <% = form_for @user, html: {id: "đăng ký"} làm | f | %> –

13

Tôi nghĩ rằng tùy chọn :namespace là những gì bạn đang tìm kiếm.

Nó gắn tên vào id của biểu mẫu cũng như tất cả các trường nhập và nhãn.

ví dụ

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

sẽ generate:

Mẫu id = NAMESPACE_new_comment

Textarea id = NAMESPACE_comment_content

Từ docs:

: namespace - Một không gian tên cho mẫu của bạn để đảm bảo tính độc đáo của id thuộc tính trên các yếu tố hình thức. Thuộc tính namespace sẽ được bắt đầu với gạch trên id HTML được tạo

+4

Đây là câu trả lời đúng, Rails đã bao gồm tùy chọn không gian tên đặc biệt cho trường hợp sử dụng này. – user2076066

+0

Tôi đồng ý. Đây sẽ là câu trả lời. – fatuhoku

Các vấn đề liên quan