Добавление миграции ссылочного столбца в 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_idtouploadsтаблица (ссылка на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