2010-02-26 6 views
6

In meiner Anwendung ein Benutzer hat viele Projekte. Ich möchte ein "hinzufügen viele Projekte" Formular erstellen, so dass die Benutzer können viele Projekte auf einmal erstellen.Wie können vorhandene untergeordnete Datensätze in einer verschachtelten Form in Schienen weggelassen werden?

Es schien mir, dass der schnellste Weg war, ein Benutzerformular mit darin verschachtelten Projektfeldern zu erstellen und die Benutzerfelder wegzulassen. Auf diese Weise wird der Benutzer beim Übergeben des Formulars gespeichert und alle neuen Projektdatensätze werden automatisch erstellt.

Allerdings möchte ich nicht die bestehenden Projekte in der Form anzeigen. Nur die leeren Felder für das neue Projekt, das erstellt wird (von @ user.projects.build). Gibt es einen Parameter, den ich weitergeben kann, oder etwas, das ich in der Form ändern kann, um die vorhandenen Projektdatensätze wegzulassen?

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

Ich verwende das Ryan Bate complex forms Beispiel. Der Code funktioniert gut. Ich möchte nur die bestehenden Projekte weglassen, um in dieser Form zu erscheinen.

Antwort

7

können Sie new_record? Methode verwenden, um zwischen neu geschaffenen Datensatz und alten zu unterscheiden:

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

das ist genau das, was ich brauchte, danke – deb

+0

dito thankx @klew – BKSpurgeon

1

können Sie

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

versuchen, dass Sie leere Felder für einen Datensatz geben sollte.

In der Steuerung können Sie mehrere Datensätze für die Beziehung

5.times { @user.projects.build } 

Diese erzeugen wird fünf neue leere Projekte an den Benutzer und Ihre aktuellen fields_for Felder müssen für neue Datensätze vornehmen.

+0

Ich denke, die Antwort ist durchaus sinnvoll, aber aus irgendeinem Grund die Felder nicht hervorgehoben werden, wenn die Überprüfung fehlschlägt. Ich bekomme das gleiche Problem beim Generieren der Felder ohne Form Builder. Vielen Dank! – deb