【问题标题】:Mysql2::Error: Unknown column '6' in 'where clause': SELECTMysql2::Error:'where 子句'中的未知列'6':SELECT
【发布时间】:2014-05-30 06:39:36
【问题描述】:

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

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

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

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

看到 6,即使它是数据活动记录正在应用反引号。因为 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. 

    }

这在整个应用程序和其他模型中都会发生,上面的代码 sn-p 只是一个实例。

环境详情:

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

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

【问题讨论】:

  • 对我来说,你的 //some code 的东西中发生了一些事情(检查凭据?虽然加载密码而不是 password_digest 似乎也有点奇怪)你的实际查询应该看起来像 SELECT "users".* FROM "users" WHERE "users"."active" = 't'跨度>
  • @jethroo 我在发布之前重命名了这些列,我同意 理想情况下,查询应该像您显示的那样,但在我的情况下,它选择 table_name.column1,table_name.@ 987654330@...table_name.lastcolumn from table where id in (11),它选择所有列但它不做table_name.*.

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我不确定为什么会出现这种情况,但我认为您可以通过在查询中使用include 在访问user_role 时避免这种情况以及对 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

    【讨论】:

    • 这在整个应用程序中都发生了我不能在整个应用程序中都这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-03
    • 1970-01-01
    • 2020-05-14
    • 2021-09-19
    • 2020-06-28
    相关资源
    最近更新 更多