2011-01-04 6 views
0

Ich habe ein Formular "Aufgaben" und ich bin dynamisch hinzufügen ein Kind "Schritte" -Formular.Rails nicht die Verbindung zwischen dynamisch hinzugefügt verschachtelten Formular und Eltern

Die 'Schritte' werden über einen JavaScript-Aufruf zum Rendern ('Schritte/Formular') hinzugefügt.

Das Formular wird ordnungsgemäß geladen, aber beim Senden des Aufgabenformulars wird der hinzugefügte Schritt nicht in die Datenbank aufgenommen.

Ich nehme an, das liegt daran, dass ich die beiden Formen nicht miteinander verbinde, aber ich bin mir nicht ganz sicher.

Mein Code ist Aufgaben/new.html.erb

 
<%= form_for @task, :html=>{:multipart=>true} do |f| %> 
    <%= f.label :task_name %> 
    <%= f.text_field :task_name %> 

<%= link_to "Add Step", @step, :remote=>true, :class=>'addStep %> 
<%= f.submit %> 
<% end %> 

<% content_for(:js) do %> 
    $('a.addStep').click(function(){ 
     $('div#newStep').append("<%= escape_javascript(render('steps/form'))%>"); 
    }); 
<% end %> 

die Schritte/_form.html.erb ist

 
<p class="fields"> 
    <%= fields_for :steps do |builder| %> 
    <%= builder.label :title %> 
    <%= builder.text_field :title %> 
<% end %> 

Ich glaube, das Problem ist, dass ich nicht bin vorbei ' f 'oder' task 'in die' step 'Form, aber ich konnte nicht herausfinden, wie das geht.

Antwort

0

so etwas wie dieses Versuchen:

<%= render :partial => 'steps/form', 
      :locals => {:form => f} %> 

Hoffnung, das hilft.

Bearbeiten- 1

Sie wie folgt vor:

<%= form_for @task, :html=>{:multipart=>true} do |f| %> 
    <%= f.label :task_name %> 
    <%= f.text_field :task_name %> 
    <div style="display:none;" id="steps_form"> 
     <%= render :partial => 'steps/form', 
       :locals => {:form => f} %> 
    </div> 
<%= link_to "Add Step", @step, :onClick=>"js_function_to_change_display_property()", :class=>'addStep' %> 
<%= f.submit %> 
<% end %> 

dann können Sie einfach Javascript verwenden die Schritte durch eine Änderung der Anzeigeeigenschaft von steps_form bilden anzuzeigen.

+0

Wo dass Harry gehen würde? Ich habe kein Render Partials Tag, ich habe nur Render ('Schritte/Form'). Könnten Sie Ihre Antwort klären? – pedalpete

+0

@pedalpete: Ich habe meine Antwort bearbeitet. Schau mal. –

+0

Hallo Harry, danke für die Bearbeitung deiner Antwort, aber deine Antwort löst das Problem nicht wirklich, da eine Aufgabe viele Schritte haben kann. Durch dynamisches Hinzufügen des Schrittformulars kann ich einer Aufgabe drei Schritte hinzufügen, ohne die Seite zu verlassen. Ich kann Divs verstecken/anzeigen. Ich denke, dass Sie mit den Einheimischen auf dem richtigen Weg sind, aber ich konnte es in meinem Code nicht umsetzen. – pedalpete

0

Möglicherweise müssen Sie die Parameter in Ihrem übergeordneten Controller aktualisieren, um die Attribute des untergeordneten Elements einzuschließen. z.B.

Controller/task_controller.rb

Class TasksController < ApplicationController 
    ... 

    def task_params 
    params.require(:task).permit :name, :description , 
     steps_attributes: [:step, :step_description, :due_date] 
    end 
end 

models/task.rb

Class Task < ActiveRecord::Base 
    has_many :steps 
    accepts_nested_attributes_for :steps 
end 

models/step.rb

Class Step < ActiveRecord::Base 
    belongs_to :task 
end