在 Rails 迁移中使用 “after” 没有任何效果

Using "after" does not have any effect in a Rails Migration

提问人:Abhishek Tanwar 提问时间:11/8/2023 最后编辑:zaphodbln_Abhishek Tanwar 更新时间:11/16/2023 访问量:64

问:

我已经生成了迁移文件并添加了 t.string :address。在'''rails db:migrate'''之前,我添加了以下行-

add_column :users, :address, :string, limit: 10, after: :email

但它是最后添加到桌子上的

t.datetime "updated_at", null: false
t.string "address", limit: 10

预期为

t.string "email"
t.string "address", limit: 10

有什么办法可以解决这个问题

ruby-on-rails 数据库迁移 ruby-on-rails-7 ruby-3

评论

0赞 James Hibbard 11/8/2023
您使用的是哪个数据库适配器?
1赞 max 11/8/2023
迁移、架构转储和数据库本身中的列顺序完全无关紧要
0赞 zaphodbln_ 11/8/2023
查看文档 edgeapi.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/...我怀疑“之后”确实有任何影响,因为它没有记录在案
1赞 Deepak Mahakale 11/8/2023
参考: stackoverflow.com/a/15481778/4758119 如果您使用的是 postgres,则不起作用
0赞 Abhishek Tanwar 11/9/2023
@JamesHibbard SQLite

答:

0赞 James Hibbard 11/9/2023 #1

SQLite不支持该选项,它是特定于MySQL的。由于SQLite本身不支持对列进行重新排序,因此如果列顺序至关重要,则需要使用所需的列顺序重新创建表。afteradd_column

正如其他人在评论中提到的,就功能而言,表中的列顺序并不重要。因此,如果这只是出于审美原因,通常不值得付出努力进行更改。