5

Pracuję nad projektem Rails (Rails wersja 4.2.3). Utworzono model User i Task, ale nie zawierałem żadnego powiązania między nimi podczas tworzenia. Teraz chcę jeden user mieć wiele tasks i jeden należących do jednego user.has_many migracja asocjacji w Railsach

Przez rails g migration AddUserToTask user:belongs_to od this thread udało mi się wstawić zagraniczny klucz identyfikatora użytkownika w tabeli zadań. Ale jak dodać migrację has_many? I uaktualniony User model:

class User < ActiveRecord::Base 
    has_many :customers 
end 

ale nie wiem, jak mam napisać migrację. Do tej pory napisałem to:

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

Ale rake db:migrate nie wykonuje żadnej akcji. Czy jest to właściwy sposób konfigurowania relacji has_many?

+1

Robisz to źle. Dodaj powiązania w modelu i odpowiadające mu pola w migracji. – Pavan

+1

jak to zrobić? – theDrifter

+0

Wystarczy dodać skojarzenia w modelu. – Pavan

Odpowiedz

19

Konfigurowanie stowarzyszenia w modelach:

class User < ActiveRecord::Base 
    has_many :tasks 
end 

class Task < ActiveRecord::Base 
    belongs_to :user 
end 

usunąć plik migracji już widoczne.

Dodaj odniesień do tasks tabeli (zakładając, że już tasks tabela):

rails g migration add_references_to_tasks user:references 

migrację bazy danych:

rake db:migrate 

Jeśli nie masz jeszcze tasks stół, tworzyć jeden:

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

migrację bazy danych:

rake db:migrate 

Odtąd zadań będą miały atrybut user_id.

+0

Cześć Andray dzięki za szczegółową odpowiedź. Moje zadania mają już identyfikator użytkownika. Jak uzyskać inny sposób, aby mój użytkownik miał wiele zadań. Bardzo się staram realizować ten kierunek. – theDrifter

+1

@Drifter, jeśli twoja tabela 'tasks' ma już kolumnę' id_użytkownika', niż jak już powiedziałem, musisz tylko zapewnić powiązania na poziomach modeli (pierwsza część mojej odpowiedzi). –

+0

@Drifter czy działa? –

1

Dodaj has_many :tasks do modelu User i belongs_to :user do modelu Task. W pliku migracji usuń wszystkie bieżące elementy metody change i dodaj linię add_index :tasks, :user_id. Następnie normalnie uruchom migrację.