Mysql2::错误:“where子句”中的未知列“6”:选择
我正在将Rails应用程序从Rails 2.3升级到3.2。 我发现了一个奇怪的错误 Mysql2::错误:“where子句”中的未知列“6”: 上述错误是由于“backtick”引起的,它与列名一起应用于where子句中的数据。请参见以下查询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 (`
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
}