Добавление переноса ссылочного столбца в Rails 4

пользователь имеет много загрузок. Я хочу добавить столбец в uploads таблицы, которая ссылается на user. Как должна выглядеть миграция?

вот что у меня есть. Я не уверен, что должен использовать (1):user_id, :int или (2) :user, :references. Я даже не уверен, работает ли (2). Просто пытаюсь сделать это "рельсами".

class AddUserToUploads < ActiveRecord::Migration
  def change
    add_column :uploads, :user_id, :integer
  end
end

соответствующий вопрос за исключением рельсов 3. Rails 3 миграции: добавление ссылочного столбца?

5 ответов


рельсы 4.x

когда вы уже есть users и uploads таблицы и хотите добавить новые отношения между ними.

все, что вам нужно сделать, это: просто создайте миграцию, используя следующую команду:

rails g migration AddUserToUploads user:references

который создаст файл миграции как:

class AddUserToUploads < ActiveRecord::Migration
  def change
    add_reference :uploads, :user, index: true
  end
end

затем запустите миграцию с помощью rake db:migrate. Эта миграция позаботится о добавлении нового столбца с именем user_id в uploads таблица (ссылка на uploads таблица. Ключ ссылается на


рельсы 5

вы все еще можете использовать эту команду для создания миграции:

rails g migration AddUserToUploads user:references

миграция выглядит немного иначе, чем раньше, но все еще работает:

class AddUserToUploads < ActiveRecord::Migration[5.0]
  def change
    add_reference :uploads, :user, foreign_key: true
  end
end

обратите внимание, что это :user, а не :user_id


Если вам нравится другой альтернативный подход с up и down способ попробовать это:

  def up
    change_table :uploads do |t|
      t.references :user, index: true
    end
  end

  def down
    change_table :uploads do |t|
      t.remove_references :user, index: true
    end
  end

[Использование Рельсов 5]

генерировать миграции:

rails generate migration add_user_reference_to_uploads user:references

это создаст файл миграции:

class AddUserReferenceToUploads < ActiveRecord::Migration[5.1]
  def change
    add_reference :uploads, :user, foreign_key: true
  end
end

теперь, если вы наблюдаете файл схемы, вы увидите, что таблица uploads содержит новое поле. Что-то вроде: t.bigint "user_id" или t.integer "user_id".

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

rails db:migrate

другой синтаксис того же самого:

rails g migration AddUserToUpload user:belongs_to