È possibile che un modello appartenga a, due modelli e abbia una relazione nidificata?può modellare "belong_to" altri due modelli e avere una relazione nidificata?
cioè di ciò che voglio
class trainer
has_many :appointments
end
class appointment
belong_to :trainer, :customer
end
class customer
has_many :appointments
end
al momento ho solo i modelli dei clienti e degli appuntamenti che sono annidati per esempio di quello che ho:
creare metodo assomiglia a questo:
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 percorsi che ho:
map.resources :patients, :has_many => [ :appointments, :visits ]
è possibile avere 2 relazioni annidate per 1 modello? a cosa dovrei cambiare il metodo di creazione, se l'appuntamento fosse anche di un formatore o di un cliente?
grazie
+ 1 brillante risposta! grazie. solo una domanda, se creo l'appuntamento dalla pagina/vista del cliente. come posso aggiungere l'ID trainer all'appuntamento? posso caricare tutti i trainer nella vista e consentire all'utente di selezionare un trainer dal menu a discesa, quindi assegnare l'ID del trainer al trainer_id archiviato nell'appuntamento? –
La tua domanda sul param trainer_id o sull'attributo record? Il parametro trainer_id viene impostato dalla rotta di risorsa nidificata. '/ trainers/123/appointments' imposta' params [: trainer_id] 'su 123,'/customers/123/appointments' imposta 'params [: customer_id]' su 123. L'attributo trainer_id sul record degli appuntamenti viene impostato da has_many associazione. '@appointment = person.appointments.build' imposterà automaticamente' @ appointment.trainer_id' o '@ appointment.customer_id' a' person.id' a seconda di quale classe è (per cambiare i valori di default, c'è un'opzione: foreign_key per appartiene a). – Zargony
consente di passare a un profilo cliente e creare un appuntamento dal suo profilo (raccoglierà l'id dai parametri customer_id), ma come faccio a assegnare a quell'appuntamento un trainer che si occuperà di tale appuntamento. se ho 10 istruttori, come posso fissare l'appuntamento a uno di loro? voglio consentire all'utente di scegliere da un menu a discesa un trainer e quindi impostare l'ID di quel trainer nel campo trainer_id? –