Ist es für ein Modell möglich, zu gehören, zwei Modelle und eine verschachtelte Beziehung?kann "Angle_to" zwei andere Modelle modellieren und haben eine verschachtelte Beziehung?
also von dem, was ich will
class trainer
has_many :appointments
end
class appointment
belong_to :trainer, :customer
end
class customer
has_many :appointments
end
im Moment habe ich nur die Kunden und Termin-Modelle, die verschachtelt sind, zB von dem, was ich habe:
Methode erstellen sieht wie folgt aus:
def create
@appointment = @customer.appointments.build(params[:appointment])
respond_to do |format|
if @appointment.save
format.html { redirect_to([@customer, @appointment], :notice => 'Appointment was successfully created.') }
format.xml { render :xml => @appointment, :status => :created, :location => @appointment }
else
format.html { render :action => "new" }
format.xml { render :xml => @appointment.errors, :status => :unprocessable_entity }
end
end
end
in Routen ich habe:
map.resources :patients, :has_many => [ :appointments, :visits ]
ist es möglich, 2 verschachtelte Beziehungen für 1 Modell zu haben? Womit würde ich meine create Methode ändern müssen, wenn der Termin auch dem Trainer und dem Kunden gehört? Unter der Annahme,
dank
+ 1 brillante Antwort! Danke. nur eine frage, wenn ich den termin über die kundenseite/ansicht erstelle. Wie füge ich die Trainer ID zum Termin hinzu? Kann ich einfach alle Trainer in die Ansicht laden und dem Benutzer erlauben, einen Trainer aus dem Drop-Down-Menü auszuwählen und dann die Trainer-ID der Trainer-ID zuzuweisen, die im Termin abgelegt wurde? –
Sie haben Fragen zum trainer_id-Parameter oder zum Datensatzattribut? Der Parameter trainer_id wird durch die verschachtelte Ressourcenroute festgelegt. '/ trainers/123/termings' sets' params [: trainer_id] 'bis 123,'/customers/123/termings' sets 'params [: customer_id]' bis 123. Das Attribut trainer_id auf dem Terminkalender wird von der has_many gesetzt Verband. '@Appointment = person.appointments.build' wird automatisch '@ termin.trainer_id' oder' @ termination.customer_id' auf 'person.id' gesetzt, je nachdem, welcher Klassenperson es ist (um die Standardeinstellungen zu ändern, gibt es eine: foreign_key-Option für gehört). – Zargony
Lassen Sie mich sagen, ich gehe zu einem Kundenprofil und erstellen Termin von seinem Profil (es wird die ID von den customer_id params abholen) aber wie kann ich dann diesen Termin einen Trainer zuweisen, der für diesen Termin verantwortlich sein wird. Wenn ich 10 Trainer habe, wie setze ich den Termin auf einen von ihnen? Ich möchte dem Benutzer erlauben, aus einem Drop-Down-Menü einen Trainer auszuwählen und dann die ID dieses Trainers auf das Feld Trainer_ID zu setzen. –