2017-06-23 2 views
0

Erstellen Sie 2 verschiedene Kinder kurz bevor Eltern gespeichert wird. Ich verstehe, dass, wenn ich parent.child.build schreibe, die ID des Elternteils automatisch dem Kind gegeben wird.Rails gebaut Kind, aber Eltern-ID Null

Hier das erste Kind ist in Ordnung, aber die zweiten einen FOLDER_ID nil (Es ist eine has_many Beziehung)

def create 
    @folder = Folder.new(folder_params) 

    @folder.events.build(scheduler_resource_id: SchedulerResource.where(user: @folder.maker).last.id, 
          start: @folder.production_date.beginning_of_month, end: @folder.production_date.end_of_month) 

    @folder.events.build(scheduler_resource_id: SchedulerResource.where(user: @folder.analyst).last.id, 
          start: @folder.production_date.beginning_of_month, end: @folder.production_date.end_of_month) 

    respond_to do |format| 
     if @folder.save 
     format.html { redirect_to @folder, notice: 'Folder was successfully created.' } 
     format.json { render :show, status: :created, location: @folder } 
     else 
     format.html { render :new } 
     format.json { render json: @folder.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

Ich verstehe nicht, warum die ID der Eltern auf das zweite Kind nicht gegeben.

EDIT

Als gefragt, hier ist mein Event-Modell

class Event < ApplicationRecord 
    attr_accessor :date_range 
    belongs_to :scheduler_resource 
    belongs_to :folder 

    accepts_nested_attributes_for :folder 

    def self.select_folder 
    Folder.all.map { |p| ["#{p.client.corporate_name} - #{p.concatenate_mandates} (#{p.status})", p.id] } 
    end 

    def all_day_event? 
    start == start.midnight && self.end == self.end.midnight ? true : false 
    end 

end 
+0

Ich habe ein Beispiel ähnlich dem, was Sie geteilt haben, und es hat gut funktioniert. Aus meiner Sicht gibt es Probleme, wo 'Ereignisse' entstehen. Kannst du bitte dein Veranstaltungsmodell teilen? –

+0

'Build' kann ein Array von Objekten erstellen, so dass Sie diese 2 Objekte in einer einzigen Build-Methode mithilfe von Array erstellen können. Wie '@books = @ author.books.build ([ {published_at: Time.now, Buchnummer:" A12346 "}, {published_at: Time.now, Buchnummer:" A12347 "} ])'. Obwohl ich nicht sicher bin, ob das dein Problem lösen wird. – Sajan

+0

@PardeepDhingra Ich habe mein Modell hinzugefügt. Das einzige, was sich von anderen Modellen unterscheidet, ist, dass ich ein accresents_nested_attributes für die Aktualisierung des Elternteils im Formular des Kindes habe. Nicht sicher, ob das hier ein Problem sein kann. – LRP

Antwort

1

In dem Codebeispiel bereitgestellt @folder mit dem #new Verfahren geschaffen, die nicht den Datensatz nicht speichern. Nicht gespeicherte Datensätze haben keine ID, daher gibt es keine ID, die den mit der Methode #build instanziierten untergeordneten Datensätzen zugewiesen werden kann.

Wenn @folder ein gespeicherter Datensatz ist, wenn Sie events.build aufrufen, wird dem zurückgegebenen Ereignismodell die gespeicherte übergeordnete ID aus @folder zugewiesen, wie folder_id.

+0

Sie haben Recht, ich baute und rettete die Kinder danach und es hat funktioniert. Vielen Dank – LRP

Verwandte Themen