Можно ли при миграции на Rails указать, что новый столбец должен быть до или после существующего столбца в таблице? - PullRequest
6 голосов
/ 19 мая 2009

Допустим, я создаю таблицу в миграции Rails, указав опустить столбец ID:

create_table :categories_posts, :id => false do |t|
  t.column :category_id, :integer, :null => false
  t.column :post_id, :integer, :null => false
end

Позже я решаю, что хочу добавить столбец идентификатора в качестве первичного ключа, поэтому создаю новую миграцию:

class ChangeCategoriesToRichJoin < ActiveRecord::Migration
  def self.up
    add_column :categories_posts, :id, :primary_key
  end

  def self.down
    remove_column :categories_posts, :id
  end
end

Но когда я смотрю на таблицу после миграции, она выглядит так:

category_id
post_id
id

Столбец id находится в последней позиции в таблице, тогда как обычно столбец id будет первым.

Есть ли способ изменить миграцию ChangeCategoriesToRichJoin, чтобы настаивать на создании столбца id ДО создания столбца category_id в таблице?

Или мне нужно удалить таблицу и добавить столбец в определение «создать таблицу»?

Ответы [ 3 ]

5 голосов
/ 29 июня 2012

Использование :after => :another_column_name, например ::

change_table :users do |t|
  t.integer :like_count, :default => 0, :after => :view_count
end
2 голосов
/ 19 мая 2009

Также посмотрите этот вопрос, с возможным решением: В Rails Migration (MySQL) вы можете указать, какой позиции должен быть новый столбец?

1 голос
/ 19 мая 2009

Я сам не смог привести столбцы в порядок, но с помощью Rails вы можете выполнить откат, изменить старый файл миграции, чтобы добавить новые столбцы в нужном вам порядке, а затем перенастроить старый процесс миграции, включая новое поле. Это не совсем идеально, но способность легко мигрировать и выполнять откат, она может работать, если у вас достаточно OCD, чтобы требовать порядок столбцов. : P

Я не эксперт, но я прочитал много документации по Rails (и совсем недавно) и не могу вспомнить, как найти решение для этого.

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