2010-02-26 8 views
6

Trong đơn của tôi, Người dùng có nhiều Dự án. Tôi muốn tạo một "thêm nhiều dự án", vì vậy, Người dùng có thể tạo nhiều dự án Dự án cùng một lúc.Làm thế nào để bỏ qua các bản ghi con hiện có trong một hình thức lồng nhau trong đường ray?

Dường như với tôi rằng cách nhanh nhất là tạo Biểu mẫu người dùng với các trường Dự án được lồng trong đó và bỏ qua các trường Người dùng. Bằng cách này khi biểu mẫu được gửi, Người dùng được lưu và tất cả các bản ghi Dự án mới được tạo tự động.

Tuy nhiên, tôi không muốn hiện có Dự án hiển thị trong biểu mẫu. Chỉ có các trường trống cho dự án mới đang được tạo (từ @ user.projects.build). Có một tham số tôi có thể vượt qua hoặc một cái gì đó tôi có thể thay đổi trong biểu mẫu để bỏ qua các hồ sơ dự án hiện tại?

<% form_for (@user) do |f| %> 

    <% f.fields_for :project do |project_form| %> 
     <%= render :partial => 'project', :locals => {:f => project_form} %> 
    <% end %> 

    <%= add_child_link "New Project", f, :projects %> 

    <%= f.submit "save" %> 

<%end%> 

Tôi đang sử dụng ví dụ complex forms của Ryan Bate. Mã hoạt động tốt. Tôi chỉ muốn bỏ qua các dự án hiện tại để hiển thị trong biểu mẫu này.

Trả lời

7

Bạn có thể sử dụng new_record? phương pháp để phân biệt giữa kỷ lục mới được tạo ra và cũ:

<% form_for @user do |f| %> 
    <% f.fields_for :project do |project_form| %> 
     <%= render :partial => 'project', :locals => {:f => project_form} if project_form.object.new_record? %> 
    <% end %> 
    <%= add_child_link "New Project", f, :projects %> 
    <%= f.submit "save" %> 
<% end %> 
+1

đó chính xác là những gì tôi cần, cảm ơn bạn – deb

+0

ditto thankx @klew – BKSpurgeon

1

Bạn có thể thử

<% f.fields_for :project, Project.new do |project_form| %> 
    <%= render :partial => 'project', :locals => {:f => project_form} %> 
    <% end %> 

mà nên cung cấp cho bạn các lĩnh vực trống cho một kỷ lục.

Trong bộ điều khiển bạn có thể tạo nhiều hồ sơ cho mối quan hệ

5.times { @user.projects.build } 

này sẽ làm cho năm dự án có sản phẩm nào mới liên quan đến người sử dụng và fields_for hiện tại của bạn sẽ có các trường cho kỷ lục mới.

+0

Tôi nghĩ rằng câu trả lời của bạn làm cho cảm giác hoàn hảo, nhưng đối với một số lý do các lĩnh vực không được nhấn mạnh khi xác nhận thất bại. Tôi nhận được cùng một vấn đề khi tạo các trường không có trình tạo biểu mẫu. cảm ơn! – deb