Mysql2 ::错误:'where子句'中的未知列'6':SELECT

时间:2014-04-15 18:33:39

标签: mysql ruby-on-rails ruby ruby-on-rails-3.2 rails-3-upgrade

我正在将我的Rails应用程序从Rails 2.3升级到3.2。 我得到了这个奇怪的错误

Mysql2::Error: Unknown column '6' in 'where clause':

上面的错误是由于`(反引号)应用于where子句中的数据以及列名,请参阅以下查询。

Mysql2::Error: Unknown column '6' in 'where clause': SELECT `users`.`username`,`users`.`password` FROM `users` WHERE `id` IN (`6`)

看到6即使数据activerecord正在向它应用反引号。因为mysql正在引发异常。

注意:这通常在调用相关对象(一对一,多对多)时看到

例如:

 u = User.where(:active =>true).each{|u|
   //some code
    u.user_role #error will raise in this line 
    }

如果我重新启动对象,它将正常工作。

  u = User.where(:active =>true).each{|u|
   //some code
    u.user_role #error will raise in this line
    u1 = User.find(u.id)
    u1.user_role #works fine. 

    }

这种情况在整个应用程序中发生,并且与其他模型一样,上面的代码片段只是一个实例。

环境详情:

操作系统:Ubuntu 13.10,Ruby 1.9.3-p545,Rails 3.2.17 mysql 5.5

有谁知道这里发生了什么?是因为宝石不相容? 如果您需要更多详细信息,请与我们联系。

2 个答案:

答案 0 :(得分:0)

这个问题是由于gem不兼容。我使用'slim_scrooge'gem来优化Rails中的查询2.X不能很好地使用Rails 3或更高版本。

答案 1 :(得分:-1)

我不确定为什么会这样,但我认为您可以在查询中使用user_role访问include时避免这种情况以及对sql的额外查询。这将在第一个查询本身中急切加载user_role,并且不会在每个循环中进行额外查询。

代码如下:

  u = User.where(:active =>true).includes(:user_roles).each{|u|
    //some code
     u.user_role #error will raise in this line 
     }

有关包含的更多详情,请访问:http://apidock.com/rails/ActiveRecord/QueryMethods/includes