2012-01-18 18 views
0

My Rails 3アプリには、自分のサイトで行った操作に関する情報を格納するために使用するUserActionオブジェクトがあります。Rails 3 ActiveRecordクエリの予期しない結果

私はデータ属性が特定の値に設定されているものだけを取得するように結果をフィルタリングしようとしていますが、何らかの理由で常に空の配列を返します。

ここで最初のレコード、「アクション」属性に基づいて、それを返すクエリ、および「データ」属性のために働いていないものを示すコンソールからの例です:

> UserAction.first 
UserAction Load (39.6ms) SELECT "user_actions".* FROM "user_actions" LIMIT 1 
=> #<UserAction id: 1, source: "127.0.0.1", action: "Failed login attempt", data: "admin", created_at: "2012-01-12 11:26:38", updated_at: "2012-01-12 11:26:38"> 

> UserAction.where('action = ?', "Failed login attempt") 
UserAction Load (1.2ms) SELECT "user_actions".* FROM "user_actions" WHERE (action = 'Failed login attempt') 
=> [#<UserAction id: 1, source: "127.0.0.1", action: "Failed login attempt", data: "admin", created_at: "2012-01-12 11:26:38", updated_at: "2012-01-12 11:26:38">] 

> UserAction.where('data = ?', "admin") 
UserAction Load (96.5ms) SELECT "user_actions".* FROM "user_actions" WHERE (data = 'admin') 
=> [] 

なぜRailsは、データが "admin"に等しいレコードが明確にある場合、2番目のクエリの空の配列を返します。私は現在、アプリケーションをRails 2.3.5からアップグレードしているので、Rails 3で導入された新しい機能(Rails 3.1.2を使用している)かもしれないことに注意してください。また、以前使用していたSqliteの代わりに、開発でPostgreSQLを使用し始めました。

ありがとうございます。

答えて

0

私は(一種の)答えを考え出した:

データパラメータは、シリアル化されたとRails 3のActiveRecordのは、文字列を逆シリアル化するいくつかの理由で、それはあなたがあなたのクエリでの検索文字列が等しくありません。

シリアライズを削除して機能しました。

関連する問題