Rails按日期查找笔记

时间:2010-07-11 21:05:14

标签: ruby-on-rails date

我创建了一个简单的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 %>

我想我可能在视图中使用了错误的语法,或者甚至不应该在视图中使用它?

Ť

2 个答案:

答案 0 :(得分:2)

获取任何指定日期的所有记录:

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

获取今天的所有记录(假设created_at总是小于当前时间):

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

获取今天的第一条记录(假设created_at总是小于当前时间):

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

答案 1 :(得分: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] } }

以上未经过测试,因为我不记得完全语法,但你需要使用lambda或者当你的rails应用程序第一次启动时,它会插入今天的日期在那里,并且在后续发出对named_scope的请求时永远不会更新。在this railscast中有关于上述情况的更多信息。

PeopleController中,您可以将其作为@todays_notes = @person.notes.today获取,然后使用@todays_notes.each do |note|在您的视图中对其进行迭代。