Подтвердить что ты не робот

Rails Миграция с добавлением и удалением ссылки

После создания файла миграции с 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

Правильно ли это изменить обратный столбец, добавленный в перенос?

4b9b3361

Ответ 1

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

  def self.down
      remove_column :users, :client_id
  end

Ответ 2

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

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

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

Ответ 3

С Rails 4 вы можете просто ввести:

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

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

Ответ 4

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 после сохранения изменений в миграции приведет к желаемым результатам.