2011-02-10 3 views
1

어제와 관련하여 질문을 던졌지 만 혼란스럽고 이해가되지 않아서 핵심 사안에 이르렀습니다.DateTime으로 ActiveRecord 검색 중

나는 entries 테이블을 가지고 있습니다. 새 레코드가 저장되면 entries_controllerdate 열에 시간을 추가합니다.이 시간은 datetime으로 기록됩니다. new 방법에서, 나는 그래서 새로운 날짜 시간을 선언

@entry.date = DateTime.new(params[:year].to_i, params[:month].to_i, params[:day].to_i) 

내가 다음 formtastic와 숨겨진 필드로 포함 : 항목이 데이터베이스에 저장되면

<%= f.input :date, :as => :hidden %> 

, 날짜 필드 2011-02-10 00:00:00처럼 보입니다. 지금까지 계획대로 모든 것이 작동하지만, date 필드에 대해 쿼리하여 해당 항목을 검색하려고하면 nil이됩니다.

나는 시도했다 : 나는 심지어는 날짜 필드이기 때문에 이해가되지 않습니다 문자열로 검색을 시도한

search_date = DateTime.new(2011,2,10) 
Entry.find_by_date(search_date) 
=> nil 

.

search_time = '2010-02-10 00:00:00' 
Entry.find_by_date(search_date) 
=> nil 

여기서 내가 뭘 잘못하고 있니? 왜 날짜별로 레코드를 검색 할 수 없습니까?

답변

0

이 기능을 사용할 수 있습니까?

Entry.where("date = #{search_date}") 
+0

아니요. 'Entry.where ("date = '# {search_date}'")'는 돌아 오지 않았습니다 – bjork24

+0

이상한데, 제 자신의 응용 프로그램에서 테스트 해 보았는데 제대로 작동하는 것 같습니다. stacktrace를 인쇄 할 수 있습니까? – ferdyh

0

난 그냥 Rails 3.0.4, mysql2 0.2.6

Entry.find_by_date(DateTime.new(2011,2,10)) 

작품이 테스트.

그렇다면 왜 datetime 열을 사용하여 날짜를 저장하고 있습니까? 그저 나쁜 생각 일 뿐이므로 레일과 SQL 설정에 따라 일종의 시간대 문제가 발생할 수 있습니다. 일부 자동 시간대 변환은 관찰중인 동작을 설명 할 수 있지만 이는 단지 추측 일뿐입니다. 개발 서버 로그를 확인하여 레일스가 실제로 생성하려는 쿼리를 생성하는지 확인하십시오.

+0

올바른 SQL을 생성 중입니다. 데이터베이스가 date_token 문자열을 기록하도록 변경 했으므로 이상한 해결 방법이라고 생각했지만 트릭을 수행하는 것으로 보입니다. – bjork24

+0

그러면 데이터베이스 문제입니다. 그건 실제로 이상한 일이지만, DB 서버의 보트를 뜨는 것은 무엇이든 ... 레일은 잘 작동하는 것처럼 보입니다. – anshul