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

Mysql2::错误:“where子句”中的未知列“6”:选择,mysql,ruby-on-rails,ruby,ruby-on-rails-3.2,rails-3-upgrade,Mysql,Ruby On Rails,Ruby,Ruby On Rails 3.2,Rails 3 Upgrade,我正在将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 (`

我正在将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正在对其应用backtick。因为mysql正在引发异常

注意:这通常在调用相关的objectone-to-one、many-to-many时出现

例如:

如果我重新初始化对象,它将正常工作

  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不兼容吗?
如果您需要更多详细信息,请告诉我。

我不确定为什么会出现这种情况,但我认为您可以通过在查询中使用include来避免这种情况,并在访问用户角色时避免对sql进行额外查询。这将在第一个查询本身中加载用户角色,并且不会在每个循环中进行额外查询

代码如下所示:

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

更多关于include的详细信息在这里:

这个问题是由于gem不兼容造成的。我在Rails 2中使用了'slim\u scrooge'gem来优化查询。X与Rails 3或更高版本的gem不兼容。

对我来说,你的//一些代码检查凭证中发生了什么?虽然加载密码而不是密码摘要似乎也有点奇怪,但您的实际查询应该类似于选择用户。*从users.active='t'@jethroo的用户中,我在发布前重命名了列,是的,我同意理想情况下,查询应该如您所示,但在我的情况下,它是选择表\u name.column1,table_name.column2…table_name.lastcolumn从id在11中的表中,它选择所有列,但不选择table_name.*。这在整个应用程序中都会发生。我不能在整个应用程序中都这样做。
  u = User.where(:active =>true).includes(:user_roles).each{|u|
    //some code
     u.user_role #error will raise in this line 
     }