2012-01-18 3 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»? Я должен отметить, что я сейчас обновляю приложение из Rails 2.3.5, поэтому в Rails 3 может быть что-то новое (я использую Rails 3.1.2). Кроме того, я начал использовать Postgresql в разработке вместо Sqlite, который я использовал раньше.

Заранее спасибо.

ответ

0

я понял, ответ (вид):

Параметр данных был сериализованным и по какой-то причине, когда Rails 3 ActiveRecord в Десериализует строку, она не равна строка, которую вы искать с вашим запросом.

Я удалил сериализацию, и это сработало.

Смежные вопросы