2010-06-16 39 views
7

Tôi có một Dự án có nhiều Công việc và mỗi Công việc thuộc về một Người.Làm cách nào để áp dụng phạm vi kết hợp khi sử dụng fields_for?

Trong chỉnh sửa hình thức dự án của tôi, tôi cho phép để chỉnh sửa công việc hiện tại và thêm những cái mới với cơ sở Đối tượng biểu mẫu lồng nhau (http://ryandaigle.com/articles/2009/2/1/what-s-new-in-edge-rails-nested-attributes):

<% project_form.fields_for :tasks do |task_form| %> 

Tôi muốn tải háo hức các liên Nhiệm vụ Person đối tượng yêu cầu khi fields_for các nhiệm vụ từ cơ sở dữ liệu, nhưng tôi không thể tìm thấy một giải pháp. Có thể không? Trong mô hình dự án, tôi có thể định nghĩa has_many của mình: các tác vụ với tùy chọn: include, nhưng tôi muốn tránh điều này vì tôi không cần phải háo hức nạp các đối tượng Person khi xử lý các nhiệm vụ dự án nói chung.

Hiện tại tôi đã tạo liên kết has_many thứ hai: tasks_including_person với accept_nested_attributes_for tương ứng và sử dụng nó trong fields_for của tôi. Nó hoạt động nhưng tôi không muốn tạo ra một liên kết cụ thể như thế này.

Trả lời

23

Bạn có thể chuyển thông số thứ hai tới fields_for là đối tượng hoặc bộ sưu tập cần hiển thị. Ví dụ:

project_form.fields_for :tasks, project_form.object.tasks.all(:include => :person) do |task_form| 
+0

Cảm ơn Jason! và xin lỗi vì sự chậm trễ lâu dài của câu trả lời của tôi. Đó là những gì tôi cần. "tasks (: include =>: person)" không tải mong muốn, tôi chỉ phải thay đổi nó thành "tasks.find (: all,: include =>: person)". – Florent2

+0

Rất tiếc, đó là sự giám sát một phần của tôi. Tôi đã cập nhật ví dụ của mình để gọi 'object.tasks.all (: include =>: person)'. –

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