Rails 3 ActiveRecord查询的意外结果

时间:2012-01-18 18:38:55

标签: ruby-on-rails-3 activerecord

My Rails 3应用程序有一个UserAction对象,我用它来存储有关在我的网站上执行的操作的信息。

我正在尝试过滤结果,以便我只获取data属性设置为特定值的那些,但由于某种原因它总是返回一个空数组。

以下是控制台显示第一条记录的示例,根据“action”属性返回的记录,以及不适用于“data”属性的记录:

> 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')
=> [] 

当显然数据等于“admin”的记录时,为什么Rails会为第二个查询返回一个空数组?我应该注意到我目前正在从Rails 2.3.5升级应用程序,所以它可能是Rails 3中引入的新东西(我正在使用Rails 3.1.2)。另外,我开始在开发中使用Postgresql而不是之前使用的Sqlite。

提前致谢。

1 个答案:

答案 0 :(得分:0)

我找到答案(种类):

数据参数是序列化的,出于某种原因,当Rails 3的ActiveRecord反序列化一个字符串时,它不等于你用查询搜索的字符串。

我删除了序列化,但它确实有效。