2009-08-03 27 views
7

Tôi đã cố triển khai biểu mẫu đa mô hình động với accepts_nested_attributes_for trong ứng dụng đường ray của mình. Tôi đã theo dõi số complex-forms example của Eloy Duran cho thấy việc triển khai cấp 2, nhưng tôi đã cố gắng mở rộng cấp độ này thành 3 cấp. Có hỗ trợ với accepts_nested_attributes_for cho biểu mẫu 3 cấp không? Bất cứ ai có thể chỉ cho tôi làm thế nào để mở rộng các ứng dụng ví dụ?Ba biểu mẫu lồng nhau ở đường ray sử dụng accept_nested_attributes_for

Tôi đã làm việc javascript một phần (không phải lúc nào cũng hoạt động vì một lý do nào đó) cho cấp 3, nhưng tôi không thể lưu đối tượng cấp thứ ba. Tên param nó được đi qua cho mỗi thuộc tính là:

greatgrandparent[grandparent_attributes][0][parent_attributes][0][object_attributes][1249277008434][attribute] 

đâu greatgrandparent là đối tượng dưới hình thức là cho, ông bà là cấp độ đầu tiên, cha mẹ là mức thứ hai, và đối tượng là mức thứ 3 (một trong tôi đang cố gắng tiết kiệm).

Cảm ơn, tôi đánh giá cao bất kỳ con trỏ nào.

Trả lời

18

Tôi đã cập nhật complex-form-examples để làm việc với Rails 2.3. Xem deep branch để biết ví dụ về các mô hình lồng nhau sâu.

git clone git://github.com/ryanb/complex-form-examples.git 
cd complex-form-examples 
git checkout -b deep origin/deep 
rake db:migrate 
script/server 

Đây là giải pháp sạch nhất mà tôi đã thấy cho đến thời điểm này. Nếu bạn tìm thấy bất kỳ lỗi hoặc cải tiến nào, vui lòng add an issue on GitHub.

+0

Bạn là một cuộc sống tiết kiệm. – Anon

+0

Hi Ryan - bạn có thể nhận xét về bất kỳ thay đổi nào có thể cần phải thực hiện để triển khai nhánh sâu trong Rails 3 không? – sscirrus

+1

Xem các tập Railscasts 196 và 197 cho giải pháp mới nhất của tôi. Nó sẽ làm việc với tổ sâu và trong Rails 3 chỉ với một vài thay đổi. http://railscasts.com/episodes/196-nested-model-form-part-1 – ryanb

2

Trước hết cảm ơn bạn Ryan đã đăng giải pháp cho bạn. Nó hoạt động rất tốt ở dạng hai cấp, nhưng tôi gặp vấn đề khi sử dụng nó ở dạng lồng sâu hơn. Firebug cho tôi lỗi javascript nếu tôi muốn đặt một số add_child_link vào một phần khác đã được thêm vào. Dường như có một lỗi thoát.

Tôi đã cố gắng tránh thoát khỏi phần bên trong bằng cách chuyển một tùy chọn khác cho phương thức liên kết, nhưng điều này bằng cách nào đó không hoạt động.

def add_child_link(name, f, options) 
    fields = new_child_fields(f, options) 
    fields = escape_javascript(fields) unless options[:already_escaping] == true 
    link_to_function name, %{ 
     var new_object_id = new Date().getTime(); 
     var html = jQuery("#{fields}".replace(/#{options[:index]}/g, new_object_id)).hide(); 
     html.appendTo(jQuery("#{options[:where]}")).show(); 
     } 
end 

Mọi gợi ý về điều đó?

Trân trọng,

Mike

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