Рельсы найти заметки по дате - PullRequest
0 голосов
/ 12 июля 2010

Я создал простое приложение rails, в котором есть люди и модель заметок.

У людей много заметок и заметок, принадлежащих людям

Приложение работает, и я могупоказать все заметки для конкретного человека, но я хотел бы иметь возможность показывать одну заметку для конкретной даты.

Сценарий по умолчанию - сегодняшняя дата.

У меня в настоящее время естьследующее:

<% @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 %>

Я думаю, что я могу использовать неправильный синтаксис в моем представлении, или, возможно, даже не должен использоватьэто в представлении?

T

Ответы [ 2 ]

2 голосов
/ 12 июля 2010

Чтобы получить все записи за любую дату:

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

Чтобы получить первую запись в любую дату:

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

Чтобы получить все записи за сегодня (при условии, что create_at всегда меньше текущего времени):

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

Чтобы получить первую на сегодня запись (при условии, что create_at всегда меньше текущего времени):

@person.notes.first( :conditions=> ["created_at >= ? ", 
    Time.now.beginning_of_day], :order => :created_at )
1 голос
/ 12 июля 2010

Исходя из вашего обновленного вопроса, вам нужно перебирать элементы, возвращаемые из вашего запроса.

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

Имейте в виду, что этот запрос действительно где-то принадлежит модели и вызывается из контроллера;)

Редактировать: Поскольку я не чувствую, что я ответил на ваш первоначальный вопрос, я добавлю к своему ответу немного.

Вы определенно можете поместить этот запрос в свой * 1008.* модель как именованная область.Что-то вроде:

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

Выше не проверено, так как я не помню синтаксис точный , но вам нужно будет использовать лямбда или когдаПриложение rails запускается впервые, оно вставит туда сегодняшнюю дату и никогда не будет обновляться при последующих запросах к named_scope.Есть больше информации о вышеупомянутой ситуации в этом Railscast .

В вашем PeopleController вы можете получить их как @todays_notes = @person.notes.today, а затем перебрать их в своем представлении с помощью @todays_notes.each do |note|.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...