2010-07-11 4 views
0

나는 사람과 노트 모델이있는 간단한 레일 앱을 만들었습니다.날짜별로 노트를 찾는 레일

사람들은 많은 노트를 가지고 노트는 사람들

응용 작업에 속하고 내가 특정 사람에 대한 모든 노트를 보여줄 수 있어요,하지만 난에 대해 하나의 메모를 표시 할 수 있도록하고 싶습니다 특정 날짜.

기본 시나리오는 현재 날짜입니다.

<% @person.notes.each do |note| %> 
    <p> 
    <h3><%=h note.title %></h3> 
    </p> 

    <p><b>Body: </b><br /> 
    <%=h note.body %> 

나는 여러 가지 방법을 시도했지만 어떤 오늘 날짜 나에게 메모를 표시 할 수 없습니다

나는 현재 다음있다.

나는 명명 된 범위를 만들려고 그와 함께 실패도 사용하려고 :

@person.notes.find_by_created_at(Time.now-1.day) 

사람이 올바른 방향으로 날 지점 수 주 시겠어요?

감사

#

나는 아래의 코드를 사용하고이 함께했다.

내 쇼보기는 다음과 같습니다.

<p> 
    <h1><%=h @person.name %></h1> 
</p> 

<h2>Notes</h2> 

<% @person.notes.all(:conditions=> ["created_at >= ? ", Time.now.beginning_of_day]) do |note| %> 
    <p> 
    <h3><%=h note.title %></h3> 
    </p> 

    <p><b>Body: </b><br /> 
    <%=h note.body %> 
    </p> 

<% end %> 

내 생각에 잘못된 구문을 사용하고 있거나보기에이 구문을 사용하지 않아야한다고 생각하십니까?

답변

1

업데이트 된 질문을 바탕으로, 당신은 당신의 쿼리에서 반환되는 항목을 반복해야합니다. 당신이 그 쿼리가 정말 어딘가에 모델에 속하고 컨트롤러에서 호출 않습니다

<% @person.notes.all(:conditions=> ["created_at >= ? ", Time.now.beginning_of_day]).each do |note| %> 

마음)

편집 : 나는 원래의 질문에 대답처럼 정말 생각하지 않기 때문에, 내가 추가 할 것 내 대답에 조금.

Note 모델에이 쿼리를 명명 된 범위로 넣을 수 있습니다.의 라인을 따라 뭔가 :

named_scope :today, lambda { |date| { :conditions => ["created_at >= ? ", Time.now.beginning_of_day] } } 

위의 내가 정확한 구문을 기억하지 않는다, 그러나 당신의 레일 앱이 처음 시작될 때 람다를 사용할 필요가 또는 다른 것으로 테스트되지 않은 상태입니다 시간에 따라 오늘 날짜가 삽입되고 named_scope에 대한 후속 요청이있을 때 업데이트되지 않습니다. 위의 상황에 대한 자세한 내용은 this railscast입니다.

PeopleController에서 @todays_notes = @person.notes.today으로 가져온 다음 @todays_notes.each do |note|으로보기에서 반복 할 수 있습니다.

+0

고맙습니다. 그게 효과가 있었어. –

2

주어진 날짜에 대한 모든 기록을 얻으려면 T :

@person.notes.first(:conditions=> ["created_at BETWEEN ? AND ? ", 
    date.beginning_of_day, date.end_of_day], :order => :created_at) 

오늘의 모든 기록을 활용하려면 다음

@person.notes.all(:conditions=> ["created_at BETWEEN ? AND ? ", 
    date.beginning_of_day, date.end_of_day]) 

주어진 날짜에 첫 번째 레코드를 얻으려면을 (created_at은 항상 현재 시간보다 작다고 가정).

@person.notes.all(:conditions=> ["created_at >= ? ", 
    Time.now.beginning_of_day]) 
(210)

오늘의 첫 번째 레코드를 얻으려면 (created_at를 가정하면 현재 시간보다 항상 작) :

@person.notes.first(:conditions=> ["created_at >= ? ", 
    Time.now.beginning_of_day], :order => :created_at) 
+0

답장을 보내 주셔서 감사합니다. 구문이 완벽하게 작동하고 올바른 sql 문을 생성합니다 (확인을 위해 mysql을 실행 했음). 그러나 어떤 이유로 내 앱이 메모를 표시하지 않습니다. 내 프로그램보기가 이렇게 보입니다. ## 원래 게시물에 코드를 추가했습니다 ## 내 생각에 내가 잘못된 생각을하고 있다고 생각합니다 ... –

+0

그 사람의 데이터가 있는지 확인 했습니까? 'script \ console'에서 명령을 실행하여 데이터가 있는지 확인하십시오. –

관련 문제