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