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

Mysql2::错误:“where 子句”中的未知列“6”:

以上错误是由于 `(backtick) 应用于 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

有人知道这里发生了什么吗?是因为 gem 不兼容吗? 如果您需要更多详细信息,请告诉我。

请您参考如下方法:

此问题是由于 gem 不兼容造成的。我使用“slim_scrooge”gem 来优化 Rails 2.X 中的查询,但在 Rails 3 或更高版本中效果不佳。


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!