Rails按日期查找笔记

我创建了一个简单的rails应用程序,它有一个人和一个笔记模型。

人们有许多笔记和笔记属于人

该应用程序工作,我能够显示特定人的所有笔记,但我希望能够显示特定日期的单个笔记。

默认情况是今天的日期。

我目前有以下内容:

 

Body:

我已经尝试了几种不同的方法但是没有任何方法可以向我显示今天的日期。

我试图创建一个命名范围,但失败了,并尝试使用:

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

有人能指出我正确的方向吗?

谢谢

汤姆

我使用了下面的代码并想出了这个。

我的节目视图看起来像这样。

 

Notes

["created_at >= ? ", Time.now.beginning_of_day]) do |note| %>

Body:

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

Ť

根据您更新的问题,您需要迭代从查询返回的项目。

 <% @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的请求已经完成。 关于此railscast中的上述情况的更多信息。

在你的PeopleController你可以将它们作为@todays_notes = @person.notes.today ,然后在你的视图中使用@todays_notes.each do |note|迭代它们。 。

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

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