【问题标题】:Rails 4 rename_column gets MySQL syntax errorRails 4 rename_column 获取 MySQL 语法错误
【发布时间】:2014-12-12 11:58:04
【问题描述】:

我在 Windows 8.1(64 位)的 Rails 4 下有一个 MySql5.6 数据库,并且正在运行迁移以重建数据库。这些迁移适用于其他开发人员。这指向我系统上的某些东西,但我不知道是什么。我得到的错误是 rename_table 引发了 MySQL 错误。

Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INDEX `index_bays_on_hub_id` TO `index_w_bays_on_hub_id`' at line 1: ALTER TABLE `w_bays` RENAME INDEX `index_b
ays_on_hub_id` TO `index_w_bays_on_hub_id`C:/Users/Dev/RubymineProjects/ital-freight-manager/db/migrate/20141128123833_rename_bays_to_w_bays.rb:3:in `change'

迁移方式是

def change
  rename_table :bays, :w_bays
end

我读到这个是说 Rails 生成了 MySQL 不理解的 ALTER TABLE ... RENAME INDEX .. 命令。数据库配置指定这是一个 MySQL 数据库(它是一个 MySQL 数据库),所以我不明白为什么 Rails(或者它可能是 Ruby)会生成无效命令。由于我是 Rails 新手,因此我将不胜感激在识别问题方面的任何帮助。

*** 刚刚意识到这是一个 rename_table,但我看到与我手动完成的 rename_column 相同。然后它击中了这个。

【问题讨论】:

  • 迁移在哪里?
  • 我是按照你的要求添加的。
  • 尝试在rename_table之前手动删除索引,重命名后添加
  • 谢谢。我知道我可以围绕这个进行编程(并且为此编写了一些通用代码),但如果我能提供帮助,我不想编辑迁移来修复系统错误。一些进一步的挖掘表明 gem 将数据库视为 MySQL 5.7 ,它支持 RENAME INDEX。现在只能解决它。

标签: mysql ruby-on-rails rails-migrations


【解决方案1】:

您需要在删除引用您的托架的索引之前 重命名表 创建新索引 示例:

def change
  remove_index :bays, name: "index_bays_on_hub_id"
  rename_table :bays, :w_bays
   ... create index
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-29
    • 2010-11-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-01
    • 2014-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多