Rails Migration с добавлением и удалением ссылки

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

Решение

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

  def self.down
      remove_column :users, :client_id
  end

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

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

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

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

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

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

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

Другие вопросы по тегам