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。
提前致谢。
答案 0 :(得分:0)
我找到答案(种类):
数据参数是序列化的,出于某种原因,当Rails 3的ActiveRecord反序列化一个字符串时,它不等于你用查询搜索的字符串。
我删除了序列化,但它确实有效。