Rails 4 - 使用MySQL2 gem获取"表不存在"错误

时间:2013-12-04 15:08:29

标签: ruby-on-rails activerecord ruby-on-rails-4 mysql2

我试图删除一个表并使用以下代码变体截断它。以下所有版本都给出了同样的错误。

代码:         把“清理数据库表:program_slots”     ProgramSlot.destroy_all     ActiveRecord :: Base.connection.execute(“TRUNCATE TABLE program_slots”)

   puts "Clearing Database Table: program_slots"
ProgramSlot.destroy_all
ActiveRecord::Base.connection.execute("TRUNCATE TABLE PROGRAMSLOTS")

    puts "Clearing Database Table: program_slots"
ProgramSlot.destroy_all
ActiveRecord::Base.connection.execute("TRUNCATE TABLE 'program_slots'")

    puts "Clearing Database Table: program_slots"
ProgramSlot.destroy_all
ActiveRecord::Base.connection.execute("TRUNCATE TABLE PROGRAM_SLOTS")

表名是         program_slots

我得到的错误是:

  >> ProgramSlot Load (0.6ms)  SELECT `program_slots`.* FROM `program_slots`

     (0.8ms)  TRUNCATE TABLE PROGRAMSLOTS

     Mysql2::Error: Table 'dd_development.programslots' doesn't exist: TRUNCATE TABLE PROGRAMSLOTS

什么是正确的语法?似乎我在执行语句中放置的下划线没有经过.......注意错误语句试图找到一个名为“programslots”的表,但真正的表名是“program_slots”。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

MySQL表名称区分大小写,因此#1和#3失败。如果你要使用引号,那么你需要为MySQL使用正确的引号,这就是#2失败的原因。我不知道为什么会这样:

ActiveRecord::Base.connection.execute("TRUNCATE TABLE program_slots")

无效。如果没有,您可以使用:

ActiveRecord::Base.connection.execute("TRUNCATE TABLE `program_slots`")

注意有角度的单引号。