我创建了一个简单的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 %>
我想我可能在视图中使用了错误的语法,或者甚至不应该在视图中使用它?
Ť
答案 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|
在您的视图中对其进行迭代。