3

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を参照してください。これは、mysqlが例外を発生させているためです。

注:これは通常、関連オブジェクト (1 対 1、多対多) の呼び出し中に見られます。

例えば:

 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. 

    }

これはアプリケーション全体で発生しており、他のモデルでも発生しています。上記のコード スニペットは 1 つのインスタンスにすぎません。

環境の詳細:

OS: Ubuntu 13.10、Ruby 1.9.3-p545、Rails 3.2.17 mysql 5.5

ここで何が起こっているか知っている人はいますか?宝石の非互換性のためですか?詳細が必要な場合はお知らせください。

4

2 に答える 2

-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

于 2014-04-15T20:00:35.543 に答える