Rails Migration с добавлением и удалением ссылки - PullRequest
41 голосов
/ 13 апреля 2011

После создания файла миграции с помощью rails generate migration AddClientToUser я могу редактировать свой файл миграции следующим образом:

class AddClientToUser < ActiveRecord::Migration
  def self.up
    change_table :users do |t|
      t.references :client
    end
  end

  def self.down
    change_table :users do |t|
      t.remove :client_id
    end
  end
end

Это правильный способ сторнировать ссылочный столбец, добавленный в миграцию?

Ответы [ 4 ]

35 голосов
/ 13 апреля 2011

это правильно!и вы также можете пойти с:

  def self.down
      remove_column :users, :client_id
  end
26 голосов
/ 29 апреля 2017

Rails 4.2.1

rails g migration RemoveClientFromUsers client:references

Создает миграцию, аналогичную:

class RemoveClientFromUser < ActiveRecord::Migration
  def change
    remove_reference :users, :client, index: true, foreign_key: true
  end
end

Кроме того, каждый может добавить другую или другую ссылку (и), добавив

add_reference :users, :model_name, index: true, foreign_key: true

в рамках самого change метода.И, наконец, выполнение rake db:migrate после сохранения изменений в миграции приведет к желаемым результатам.

23 голосов
/ 01 октября 2013

После рельсов 4 вы можете сделать следующее

class AddClientToUser < ActiveRecord::Migration
  def change
    add_reference :users, :client, index: true
  end
end

Он будет обрабатывать для вас взлеты и падения, а также создавать индекс внешнего ключа.Вы также можете использовать remove_reference, чтобы сделать обратное.

2 голосов
/ 24 октября 2013

С Rails 4 вы можете просто набрать:

$ rails создать миграцию клиента AddClientRefToUser: ссылки на

в консоли, и это будет то же, что сказал Райан.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...