Rails迁移:在不更改类型的情况下向列添加注释

时间:2018-10-18 05:14:33

标签: mysql ruby-on-rails migration ruby-on-rails-5 mysql2

我目前正在执行一项任务,向数据库中的列添加大量注释。我目前正在尝试使用change_column函数,如下面的代码;但是我遇到了一些错误,担心当我真正想让它们呆着时,可能会不小心更改某些类型。

change_column :tablename, :id, :bigint, comment: "id"

当所讨论的列是外键时,这将导致以下错误:

  

Mysql2 :: Error:无法更改列'id':在外键中使用   约束'fk_rails_(8个数字和字母的字符系列)   表'databasename.tablename'

我还尝试了以下方法,

change_column_comment :tablename, :id, comment:'ID'

它导致以下错误:

  

change_column_comment(:tablename,:id,{:comment =>“ ID”})

     

铁轨中止了! NotImplementedError:   ActiveRecord :: ConnectionAdapters :: Mysql2Adapter不支持   更改列注释

3 个答案:

答案 0 :(得分:1)

我也收到了相同的错误消息:

NotImplementedError:ActiveRecord :: ConnectionAdapters :: Mysql2Adapter不支持更改列注释

发生时,您可以更改:

发件人:

    def change
change_column :tablename, :id, :bigint, comment: "id"

收件人:

    def up
change_column :tablename, :id, :bigint, comment: "id"
    end
    def down
change_column :tablename, :id, :bigint, comment: ""
    end

我的Rails版本:5.1.5

答案 1 :(得分:0)

我不明白你的意思,但是你为什么不使用add_column而不是change_column

add_column :tablename, :comment, :text, default: "ID"

答案 2 :(得分:0)

外键仍然是一个问题,但是我设法通过提取当前数据类型并在下面的语句结构中为每一列使用它们来获得合理的结果。

connection.execute("ALTER TABLE `tablename` MODIFY `id` bigint(20) comment 'ID'")