当前位置:  开发笔记 > 后端 > 正文

在Rails Migration(MySQL)中,您可以指定新列的位置吗?

如何解决《在RailsMigration(MySQL)中,您可以指定新列的位置吗?》经验,为你挑选了4个好方法。

如果我通过My​​SQL添加列,我可以指定表中该列将使用AFTER修饰符的位置.但是如果我通过Rails迁移执行add_column,则会在表的末尾创建该列.

rails迁移是否有任何功能来指定添加列的位置?



1> Gabe Martin-..:

现在可以通过传递:after参数在Rails 2.3.6+中实现

https://rails.lighthouseapp.com/projects/8994/tickets/3286-patch-add-support-for-mysql-column-positioning-to-migrations

对于没有看到使用此功能的优势的所有人:您是否永远不会在ORM之外查看您的数据库?如果我在任何类型的UI中查看,我喜欢将外键,状态列,标志等组合在一起.这不会影响应用程序,但肯定会加快我查看数据的能力.


此外,例如,`:after =>:id`,你也可以说`:first => true`将它作为第一列插入.
如果你想知道为什么这对于在PostgreSQL上运行的迁移不起作用,那是因为[MySQL支持AFTER作为ADD COLUMN选项](https://dev.mysql.com/doc/refman/5.1/en/alter- table.html)和[PostgreSQL没有](http://www.postgresql.org/docs/9.1/static/sql-altertable.html)

2> Tamik Soziev..:

你当然可以.

简短回答:

add_column :users, :gender, :string, :after => :column_name

答案很长:

这是一个示例,假设您要在" 用户 " 列之后添加名为" gender "的列到" users "表.

    类型 rails g migration AddGenderToUser gender:string

    在创建的迁移中添加" after =>:username ",如下所示:

    class AddSlugToDictionary < ActiveRecord::Migration
      def change
        add_column :users, :gender, :string, :after => :username
      end
    end
    



3> 小智..:

我创建了一个补丁,将这些附加功能添加到ActiveRecord Mysql适配器.它适用于主人和2-3稳定.

https://rails.lighthouseapp.com/projects/8994/tickets/3286-patch-add-support-for-mysql-column-positioning-to-migrations

它可能是特定于mysql的,但它不会使您的迁移变得不那么便携(其他适配器只会忽略额外的定位选项).



4> Bill Karwin..:

add_column迁移中的方法似乎没有位置选项.但迁移支持执行文字SQL.我不是Rails开发人员,但是类似于以下内容:

class AddColumnAfterOtherColumn < ActiveRecord::Migration
  def self.up
    execute "ALTER TABLE table_name ADD COLUMN column_name INTEGER 
      AFTER other_column"
  end

  def self.down
    remove_column :table_name, :column_name
  end
end

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有