如何在Rails 3中指定使用迁移添加的字段顺序?

时间:2011-12-01 02:05:04

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1

如何指定我想添加新列的字段?(我不希望在时间戳之后添加字段在底部)

add_column :users, :is_active, :boolean

2 个答案:

答案 0 :(得分:1)

以下是:

add_column :users, :is_active, :boolean, :after => :some_column

其中:some_column是要添加的列的名称:is_active after。

答案 1 :(得分:1)

一般来说,你不能也不应该在乎。关系数据库中的表实际上没有任何特定的顺序;这就是为什么你要在INSERT时总是指定列而不要说select * ...之类的东西(是的,ActiveRecord就是这样做但是那并不意味着这是一个好主意,只是因为AR从悬崖上跳下来没有这意味着你应该等等。)

如果你坚持尝试为它做数据库的工作,那么可移植的方式是:

  1. 将表复制或重命名为另一个表。
  2. 删除原始内容(除非您在(1)中重命名)。
  3. 按照您想要的顺序创建包含列的新表。
  4. 希望数据库在(3)中注意您的订单。
  5. 将数据从(1)中的表复制到(3)中的“新”表。
  6. ...
  7. 利润。
  8. 如果您使用的是MySQL或MySQL2数据库适配器,则可以使用:after => :some_column optionadd_column。如果您使用的是SQLite或PostgreSQL,请参阅上面的可移植方式。如果您正在使用其他任何内容,那么您必须阅读adapater的文档或源代码以查看支持的内容。

    但在继续之前,你应该问问自己为什么你认为你想这样做。