2012-01-18 2 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') 
=> [] 

않는 이유 레일스는 데이터가 "admin"과 같은 레코드가 분명히있을 때 두 번째 쿼리에 대해 빈 배열을 반환합니다. 필자는 현재 Rails 2.3.5에서 앱을 업그레이드 중이므로 Rails 3에 새로운 기능이 추가 될 수 있습니다 (Rails 3.1.2 사용). 또한, 나는 이전에 사용했던 Sqlite 대신 개발에서 PostgreSQL을 사용하기 시작했습니다.

미리 감사드립니다.

답변

0

내가 (가지) 답을 알아 낸 :

데이터 매개 변수는 직렬화이고 레일 3의 액티브 문자열을 역 직렬화 어떤 이유로, 그것은 같지 않습니다 당신이 당신의 쿼리와 검색 문자열.

serialize를 제거하고 작동했습니다.