2013-02-19 3 views
12

persone,modello di generazione con associazioni ActiveRecord

Sto lavorando alla creazione di un'applicazione in cui ho due entità nel mio spazio problematico. Un'entità è "biologa" e l'altra entità è "esperimento", ora un biologo può avere molti esperimenti e ogni esperimento può avere molti biologi.

so come creare modelli e percorsi utilizzando il generatore di riga di comando:

rails generate scaffold Biologist name:string expertise:string last_pub:text 

Qual è il modo giusto per aggiungere un'associazione? È di andare e aggiornare il codice del modello dopo la generazione? Ciò che non mi è chiaro è se aggiungo un'associazione "belongs_to" post generazione come si riflette nello schema DB senza eseguire una migrazione o qualcosa del genere? Nell'esempio sopra, se "esperimento" appartiene a "biologo", allora ci sarà una chiave estranea nella tabella "biologo", come sarà creata se aggiungo le associazioni nella classe del modello dopo la generazione. Sono abbastanza nuovo per i binari, quindi mi scuso se questa è una domanda ingenua.

risposta

2

È necessario creare una migrazione di aggiungere una colonna biologist_id alla tabella experiments, e quindi aggiungere il rapporto belongs_to :biologist nel modello experiments.

Potete trovare ulteriori dettagli here.

40

Penso che si sta cercando qualcosa di simile al seguente:

rails g scaffold Biologist experiment:references 

this article Leggi da Jose Valim dove vi mostra come fare quanto sopra, e anche aggiungere indici db dalla riga di comando:

+0

Perché dovresti aggiungere gli indici db dalla riga di comando anziché all'interno della migrazione stessa? I DB del compagno di squadra non saranno indicizzati se lo lasciamo fuori dalla migrazione ... – Meltemi

+1

Provalo tu stesso 'rails g scaffold Titolo biologo: indice email: uniq'. Vedrai che il codice richiesto per la creazione di indici viene aggiunto automaticamente alla tua migrazione. Salva un po 'di digitazione e significa che puoi semplicemente eseguire le tue migrazioni e andare avanti. – stephenmurdoch

+0

ic ... I, erroneamente, ho pensato che stavi suggerendo di apportare modifiche allo schema direttamente dalla riga di comando. Colpa mia. – Meltemi

0

Vorrei generare un modello per ciascuno e quindi creare una tabella di join in quanto si dispone di molti per avere molte relazioni. Se segui correttamente la convenzione, i binari dovrebbero comprendere la relazione fornita dalla tabella di join.

In generale, se è necessario modificare le relazioni del record attivo, è necessario farlo nel modello utilizzando una relazione has_many o has_and_belongs_to_many.