5

Я работаю над проектом Rails (Rails версии 4.2.3). Я создал модель User и Task, но не включал никакой связи между ними во время создания. Теперь я хочу, чтобы один user имел много tasks и один task принадлежал одному user.has_many association migration in Rails

С помощью rails g migration AddUserToTask user:belongs_to от this thread мне удалось вставить в таблицу задач внешний ключ user_id. Но как добавить миграцию has_many? Я обновил User модель:

class User < ActiveRecord::Base 
    has_many :customers 
end 

, но я не уверен, как я должен написать миграцию. До сих пор я писал:

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

rake db:migrate Но не выполняет никаких действий. Правильно ли это установить связь has_many?

+1

Вы делаете это неправильно. Добавьте ассоциации в модель и соответствующие поля в процессе миграции. – Pavan

+1

как это сделать? – theDrifter

+0

Просто добавьте ассоциации в модель. – Pavan

ответ

19

Настройка ассоциаций в моделях:

class User < ActiveRecord::Base 
    has_many :tasks 
end 

class Task < ActiveRecord::Base 
    belongs_to :user 
end 

Удалить файл миграции вы показали.

Добавить ссылки на tasks таблицы (если у вас уже есть tasks таблицу):

rails g migration add_references_to_tasks user:references 

Перенос базы данных:

rake db:migrate 

Если вы не tasks таблицу еще, создать один:

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

Перенос базы данных:

rake db:migrate 

Теперь ваши задачи будет иметь user_id атрибут.

+0

Привет Андрай спасибо за подробный ответ. Мои задачи уже имеют user_id. Как мне получить другой способ, чтобы у моего пользователя было много задач. Я очень стараюсь реализовать это направление – theDrifter

+1

@theDrifter, если ваша таблица 'tasks' уже имеет столбец' user_id', чем, как я сказал, вам нужно только обеспечить ассоциации на уровнях моделей (самая первая часть моего ответа). –

+0

@theDrifter, вы получили его? –

1

Добавить has_many :tasks в модель User и belongs_to :user в модель Task. В файле миграции удалите все текущее тело метода change и укажите строку add_index :tasks, :user_id. После этого выполните миграцию в обычном режиме.

Смежные вопросы