5

Sto lavorando a un progetto Rails (versione Rails 4.2.3). Ho creato un modello User e Task ma non ho incluso alcuna associazione tra di loro durante la creazione. Ora voglio uno user per avere molti tasks e uno task appartenenti a uno user.has_many migration di associazione in Rails

tramite rails g migration AddUserToTask user:belongs_to da this thread sono stato in grado di inserire la chiave user_id esterna nella tabella delle attività. Ma come aggiungere una migrazione allo has_many? Ho aggiornato il modello User:

class User < ActiveRecord::Base 
    has_many :customers 
end 

ma io non sono sicuro di come devo scrivere la migrazione. Finora ho scritto questo:

class addTasksToUser < ActiveRecords::Migration 
    def change 
    update_table :users do |t| 
     t.has_many :tasks 
    end 
    add_index :users, taks_id 
    end 
end 

Ma rake db:migrate non esegue alcuna azione. È questo il modo corretto di impostare la relazione has_many?

+1

Stai sbagliando. Aggiungi le associazioni nel modello e i campi corrispondenti nella migrazione. – Pavan

+1

come faccio? – theDrifter

+0

Basta aggiungere associazioni nel modello. – Pavan

risposta

19

Impostare associazioni di modelli:

class User < ActiveRecord::Base 
    has_many :tasks 
end 

class Task < ActiveRecord::Base 
    belongs_to :user 
end 

eliminare il file di migrazione che hai mostrato.

Aggiungere riferimenti a tasks tavolo (supponendo che già tasks tabella):

rails g migration add_references_to_tasks user:references 

Migrazione del database:

rake db:migrate 

Se non si dispone di tasks tavolo ancora, creare uno:

rails g migration create_tasks name due_date:datetime user:references # add any columns here 

Migrazione del database:

rake db:migrate 

D'ora in poi le attività avranno attributi user_id.

+0

Ciao Andray, grazie per la risposta dettagliata. Le mie attività hanno già un ID utente. Come faccio a ottenere l'altro modo così, che il mio utente ha molte attività. Ho molta difficoltà a implementare questa direzione – theDrifter

+1

@theDrifter se la tabella 'tasks' ha già la colonna' user_id', che come ho detto, è sufficiente garantire associazioni sui livelli dei modelli (la prima parte della mia risposta). –

+0

@theDrifter hai funzionato? –

1

Aggiungi has_many :tasks al modello User e belongs_to :user al modello Task. Nel file di migrazione, elimina tutto il corpo corrente del metodo change e includi una riga add_index :tasks, :user_id. Successivamente, esegui normalmente la migrazione.