首页 > 解决方案 > Rails 迁移返回索引太长

问题描述

下面是我为重命名 schooling_document_types_managing_areas 表中的列而定义的迁移文件,但问题是当我运行迁移时出现错误索引名称太长;限制为 63 个字符。然后我尝试了,比如

rename_column :schooling_document_types_managing_areas, :service_id, :managing_area_id, name: :index_schooling_documents_on_managing_area

然后它返回

ArgumentError:参数数量错误(给定 4,预期 3)。

知道我哪里出错了

class RenameColumnName < ActiveRecord::Migration[5.1]
  def up
    rename_column :schooling_document_types_managing_areas, :service_id, :managing_area_id
  end

  def down
    rename_column :schooling_document_types_managing_areas, :managing_area_id, :service_id
  end
end

标签: ruby-on-railsrubymigrationruby-on-rails-5

解决方案


删除索引并重新添加呢?

def change
  remove_index :schooling_document_types_managing_areas, name: :index_schooling_document_types_managing_areas_on_service_id
  rename_column :schooling_document_types_managing_areas, :service_id, :managing_area_id
  add_index :schooling_document_types_managing_areas, name: :index_schooling_documents_on_managing_area
end

此外,我不确定您在该service_id领域的生产中数据的性质,但请记住,仅重命名并不是最安全的方式,以防有人在您运行的确切时刻使用您的应用程序你的迁移。


推荐阅读