【问题标题】:schema fields ordering on a rails migration在 Rails 迁移上排序的模式字段
【发布时间】:2012-04-15 20:33:47
【问题描述】:

当通过迁移向表中添加一些字段时,是否可以告诉 rails 将 id 列保留在模式的顶部,并将时间戳保留在底部?

我想要的是在控制台上使用 rails 时始终将这些字段放在相同的位置,我知道可以在 schema.rb 中重新排序它们并重新加载它,但我正在寻找一种适合生产的更清洁的方法环境也是。

谢谢

【问题讨论】:

  • 列的顺序无关紧要。如果是这样,那你就错了。
  • @SergioTulentsev 我会引用 martin-dempesy 的话:在通过任何 DB UI 查看数据时,以有组织的方式查看数据很有用(我们知道它不会影响速度或性能)。
  • 一些 DB UI 允许轻松重新排序列。它是在 Navicat 上的拖放操作。

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


【解决方案1】:

你可以在 Rails 2.3.6+ 中做这样的事情(可能目前只在 Mysql 中):

add_column :table_name, :column_name, :column_type, after: :other_column_name

change_table :the_table do |t|
  t.column_type :column_name, after: :other_column_name
end

来源:
- In a Rails Migration (MySQL), can you specify what position a new column should be?
- https://rails.lighthouseapp.com/projects/8994/tickets/3286-patch-add-support-for-mysql-column-positioning-to-migrations

【讨论】:

    【解决方案2】:

    您可能对fix-db-schema-conflicts gem 感兴趣,它会在生成db/schema.rb 文件时自动按字母顺序对列进行排序。

    时间戳不一定在列表的最后,但架构不会依赖于添加列的顺序(通过迁移)。

    【讨论】:

    • 我认为对于大多数 Rails 应用程序,上述 gem 都有效。如果您使用select_all 方法api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/… 并使用columns/rows 方法,则需要考虑一些边缘情况。如果您编写了好的代码,您可能要么没有使用该方法,要么使用 select_all 和 to_hash 转换,从而消除了订单问题。如果您的旧版应用程序可能存在订单依赖性问题,请小心使用此 gem。
    猜你喜欢
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 2010-12-30
    • 2011-07-27
    • 1970-01-01
    • 2015-08-03
    • 1970-01-01
    • 2012-01-01
    相关资源
    最近更新 更多