2010-03-11 26 views
5

Tôi đã có một ứng dụng đường ray hiển thị danh sách các mục được gọi là mô-đun. Tôi đang lặp qua các bước này, hiển thị một phần cho từng phần bao gồm lệnh gọi remote_form_for.Nhiều remote_form_for trên cùng một trang gây ra các id trùng lặp

Tất cả điều này hoạt động, nhưng không xác thực HTML vì tất cả các trường văn bản biểu mẫu của tôi đều có cùng một id.

Có tùy chọn tiền tố: trên biểu mẫu (hoặc cái gì khác) mà tôi có thể sử dụng để giải quyết vấn đề này không?

Cập nhật:
(một số mã)

//_module_form.html.erb 
    <% remote_form_for app_module do |f| %> 
     <%= f.label :name %> 
     <%= f.text_field :name %> 
     <%= submit_tag 'Save' %> 
    <%end %> 

    //parent page 
    <% @thing.modules.each do |app_module| %> 
     <%= render :partial => "module_form", :locals => { :app_module => app_module } %> 
    <% end %> 

Vì vậy, nếu tôi có nhiều hơn 1 mục trong bộ sưu tập, tôi làm cho hình thức giống hệt nhau trên cùng một trang, và id hình thức và textbox id được nhân đôi .

Tôi có thể tùy chỉnh id biểu mẫu khá dễ dàng, nhưng điều gì về text_box, vì bộ điều khiển đang tìm kiếm các điều khiển được đặt tên cụ thể?

+0

Chúng ta cần một số mã để hiểu – shingara

+0

Bạn có thể thêm mã của bạn để chất vấn? – klew

+0

Đã thêm một số mã. –

Trả lời

2

Add :index => object.id vào băm tùy chọn khi tạo biểu mẫu của bạn. Điều này sẽ tạo id ở dạng object_id_attribute mà không can thiệp vào bộ điều khiển.

Sửa

Các tài liệu liên quan đến :index là là mơ hồ gây hiểu nhầm. :index không ảnh hưởng đến việc gửi biểu mẫu. Giải pháp là chỉ định thuộc tính :id cho mỗi trường. Điều này sẽ thay đổi thuộc tính id, để lại name không bị tổn hại (là số tiền được tính cho việc gửi).

Đây là mã tôi sử dụng trong một helper generic để tạo ra những lĩnh vực:

def create_field(f, field_type, object, field_name) 
    field_id = "#{object.class.name.downcase}_#{object.id.to_s}_#{field_name.to_s}" 
    f.send(field_type, field_name, :id => field_id) 
end 
1

lặp qua chúng với collection.each_with_index do |item, i| sau đó vào làm một phần đường chuyền trong một biến địa phương:

render :partial => "some_partial", :locals => {:form_id => "form_id_#{i}"} 

Sau đó, trong phần bạn có thể truy cập vào <%= form_id %>

Đó sẽ là một cách để làm điều đó.

Tôi giả định trong remote_form_for bạn có thể vượt qua trong: id => form_id hay: html_options => {: id => form_id}

Hình như bạn có thể, xem: http://api.rubyonrails.org/classes/ActionView/Helpers/PrototypeHelper.html#M001649

+0

giải quyết id mẫu trùng lặp của tôi, nhưng về id của hộp văn bản thì sao? –

+0

Bạn có thể đặt id trong text_field theo kiểu tương tự, bằng cách chuyển đến: id tới trình trợ giúp text_field. Thuộc tính name trên các trường đầu vào phải được người trợ giúp biểu mẫu quan tâm. Tại sao không sử dụng một cái gì đó như: id => "app_module _ # {app_module.id} _name" – tsdbrown

+0

Nếu tôi làm điều đó, bộ điều khiển của tôi không còn hoạt động chính xác nữa, vì nó không hiểu các thông số được đăng. –

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