2014-10-05 6 views
0

모든 비교 레일은

내가 마지막으로 이후 업데이트 된 대화가있는 경우 특정 날짜 이후에 대화를 찾고 쿼리 모바일 앱이 볼 수 있도록해야 확인했다. 레일스가 질의를하기 전에 UTC로 "since_date"를 변환하지 않고 잘못된 결과를 얻고 있다는 것을 알게되었습니다.

생성 된 쿼리 결과는 반환 된 대화 2014- "의 UTC의 last_message_at 날짜/시간이

[#<Conversation id: 980190962, last_message_id: 298486374, user_ids: nil, last_message_at: "2014-10-05 15:48:22", message_count: 2, created_at: "2014-10-05 16:48:22", updated_at: "2014-10-05 16:48:22", key: "298486374,980190962">] 

공지 사항입니다

SELECT "conversations".* FROM "conversations" INNER JOIN "conversation_joins" ON "conversations"."id" = "conversation_joins"."conversation_id" WHERE "conversation_joins"."user_id" = 980190962 AND (last_message_at > '2014-10-05 11:46:22 -0500') 

이다 (이것은 내 기능 테스트에서 바로오고있다) 10-05 15:48:22 "이며 쿼리에서"2014-10-05 11:46:22 -0500 "을 찾고"2014-10-05 16:46:22 "는 반환하지 말아야 함을 의미합니다. 이것을 확인하기 위해 앞서 X 시간을 보았던 것과 똑같은 일을했고, 시간대 추측과 일치하는 6 시간 전에 한 번 대화가 돌아 오지 않았습니다.

쿼리를 작성하기 전에 컨트롤러에서 날짜/시간을 UTC로 명시 적으로 변경해야합니까, 아니면 표준 시간대가 이미 포함되어 있으므로이 작업을 수행해야합니까? 내 레일 버전은 "3.2.13"

답변

2

코드는 where 호출로 보내기 전에 날짜를 UTC로 변경해야합니다. ActiveRecord는 쿼리 매개 변수를 변환하지 않습니다.

+0

Mauricio. 그것이 바로 제가 추측 한 것입니다. – echappy