在Rails迁移中,是否可以指示新添加的列应该在表中的现有列之前还是之后?

pez*_*ser 6 migration ruby-on-rails

假设我在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
Run Code Online (Sandbox Code Playgroud)

后来我决定将ID列添加为主键,因此我创建了一个新的迁移:

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
Run Code Online (Sandbox Code Playgroud)

但是当我迁移后查看表格时,它看起来像这样:

category_id
post_id
id
Run Code Online (Sandbox Code Playgroud)

id列位于表中的最后一个位置,而通常id列是第一个.

有没有办法更改ChangeCategoriesToRichJoin迁移以坚持在表中的category_id列之前创建的id列?

或者我是否需要删除表并在"创建表"定义中添加列?

ohh*_*hho 5

使用:after => :another_column_name,例如:

change_table :users do |t|
  t.integer :like_count, :default => 0, :after => :view_count
end
Run Code Online (Sandbox Code Playgroud)


jes*_*ess 1

我自己无法将列按顺序排列,但是使用 Rails,您可以回滚,更改旧的迁移文件以按照您想要的顺序添加新列,然后重新迁移旧的迁移(包括新字段) 。它并不完全理想,但是能够轻松迁移和回滚,如果您强迫症足以要求列顺序,那么它可以工作。:P

我不是专家,但我读过很多 Rails 文档(最近)并且不记得为此找到了解决方案。