【问题标题】:Rails Migration: Adding comment to column without changing typeRails 迁移:在不更改类型的情况下向列添加注释
【发布时间】:2018-10-18 05:14:33
【问题描述】:

我目前正在处理将大量 cmets 添加到数据库中的列的任务。我目前正在尝试使用 change_column 函数,如下面的代码;但是我遇到了一些错误,并担心当我真的想不理会它们时可能会意外更改某些类型。

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

当相关列是外键时,这会导致以下错误。:

Mysql2::Error: Cannot change column 'id': used in a foreign key 约束'fk_rails_(8个字符的数字和字母序列)'的 表'数据库名.tablename'

我也尝试了以下方法,

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

它会导致以下错误:

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

rails 中止!未实现错误: ActiveRecord::ConnectionAdapters::Mysql2Adapter 不支持 更改列 cmets

【问题讨论】:

  • 使用 Rails 5.1.4
  • 总是有connection.execute('SQL to add the comment goes here')
  • 啊,这可能是一个我没有想到的很好的解决方案。用更多的 rails-y 东西来做会很好,但我现在就试一试。
  • connection.execute("ALTER TABLE 'table_name' CHANGE 'id' 'id' BIGINT(20) COMMENT 'ID' ") 给出了与 change_column 函数相同的错误。我认为 mysql2 可能是这里的限制因素,除非 rails 有一个聪明的解决方案。
  • 一点谷歌搜索表明限制在 MySQL 本身。我认为您可能必须删除所有 FK,添加注释(这可能非常昂贵),然后将 FK 放回原处。

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


【解决方案1】:

我也收到了同样的错误信息:

NotImplementedError: ActiveRecord::ConnectionAdapters::Mysql2Adapter 不支持更改列 cmets

当它发生时,你可以改变:

发件人:

    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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 因为我正在对现有数据库进行更改。除非 add_column 简单地覆盖?我觉得它会抛出一个它已经存在的错误。但我想我还没有尝试过,所以我会看看它如何与这种情况相互作用,但我觉得它不会解决手头的任何一个问题。
    • 哦,我明白你在说什么,添加一个单独的 cmets 列。为了保持一致,我需要为此使用 sql cmets,也不希望在正常的 select * 调用中返回该列等。它也不会导致列本身的 cmets。
    • 为了澄清,我想在专栏中添加评论。不添加 cmets 列。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2020-02-02
      • 1970-01-01
      • 2018-09-30
      • 2017-05-11
      • 2022-06-16
      • 1970-01-01
      • 1970-01-01
      • 2011-10-18
      • 1970-01-01
      相关资源
      最近更新 更多