2015-08-15 46 views
2

尝试使用他们的@ event.date显示一些记录(在应用中名为Event的模型)以组织它们。在两个日期之间查找记录的Ruby查询在控制台中工作,但不在视图中

在控制台中,我能看到他们在运行此:

Event.where(:date => DateTime.now.next_week..DateTime.now.next_week.end_of_week) 

导致控制台

Event Load (0.5ms) SELECT "events".* FROM "events" WHERE ("events"."date" BETWEEN '2015-08-16 22:00:00.000000' AND '2015-08-23 21:59:59.000000') 
=> #<ActiveRecord::Relation [#<Event id: 1, name: "My BBQ", description: "A BBQ with friends", city: "Brussels", accepted: 0, date: "2015-08-21", created_at: "2015-08-15 11:06:54", updated_at: "2015-08-15 11:06:54">, #<Event id: 6, name: "BBQ on the 20", description: "Because weekly bbq", city: "Brussels", accepted: 0, date: "2015-08-20", created_at: "2015-08-15 11:56:09", updated_at: "2015-08-15 11:56:09">, #<Event id: 8, name: "Birthday BBQ", description: "Because yes", city: "Brussels", accepted: 0, date: "2015-08-19", created_at: "2015-08-15 12:17:19", updated_at: "2015-08-15 12:17:19">, #<Event id: 5, name: "Sunday BBQ", description: "It will rain", city: "Brussels", accepted: 0, date: "2015-08-17", created_at: "2015-08-15 11:46:44", updated_at: "2015-08-15 12:21:15">, #<Event id: 9, name: "Test BBQ", description: "Testing", city: "Brussels", accepted: 0, date: "2015-08-23", created_at: "2015-08-15 12:34:33", updated_at: "2015-08-15 12:34:33">, #<Event id: 10, name: "Test num 2", description: "", city: "Brussels", accepted: 0, date: "2015-08-22", created_at: "2015-08-15 12:35:23", updated_at: "2015-08-15 12:35:23">]> 
irb(main):051:0> 

在那里我想呈现什么输出控制台有视图此代码:

<% @events.each do |event| %> 

     <% if event.date === DateTime.now.next_week..DateTime.now.next_week.end_of_week %> 
      <% if event.accepted == 0 %> 
       <div class="row eventrow"> 
        <span class="eventlikes">↑9</span> 
        <a href="/events/<%= event.id %>"><span class="eventtitle"><%= event.name %> | <%= event.city %></span></a> On <%= event.date %> 
        <div class="eventgoers right"> 
        <span class="">Submitted by</span><img src="http://i.imgur.com/Lpavq5s.png?1" class="individualeventgoer"> 
        </div> 
       </div> 
      <% else %> 
       <div class="row eventrow red"> 
        <span class="eventlikes">↑9</span> 
        <a href="/events/<%= event.id %>"><span class="eventtitle"><%= event.name %> | <%= event.city %></span><span class="">Only visible to admin</span></a>On <%= event.date %> 
        <div class="eventgoers right"> 
        <span class="">Submitted by</span><img src="http://i.imgur.com/Lpavq5s.png?1" class="individualeventgoer"> 
        </div> 
       </div> 
      <% end %> 
     <% else %> 
     no events 
     <% end %> 

    <% end %> 

但在最后一个视图中,我只设法得到1显示,为什么? enter image description here

注意,我也尝试添加一个 ''查询如:

Event.where(:date => DateTime.now.next_week ... DateTime.now.next_week.end_of_week),但结果仍然不是视图中的预期结果。

在控制台对于上次查询我得到:

irb(main):051:0> Event.where(:date => DateTime.now.next_week...DateTime.now.next_week.end_of_week) 
    Event Load (0.5ms) SELECT "events".* FROM "events" WHERE ("events"."date" >= '2015-08-16 22:00:00.000000' AND "events"."date" < '2015-08-23 21:59:59.000000') 
=> #<ActiveRecord::Relation [#<Event id: 1, name: "My BBQ", description: "A BBQ with friends", city: "Brussels", accepted: 0, date: "2015-08-21", created_at: "2015-08-15 11:06:54", updated_at: "2015-08-15 11:06:54">, #<Event id: 6, name: "BBQ on the 20", description: "Because weekly bbq", city: "Brussels", accepted: 0, date: "2015-08-20", created_at: "2015-08-15 11:56:09", updated_at: "2015-08-15 11:56:09">, #<Event id: 8, name: "Birthday BBQ", description: "Because yes", city: "Brussels", accepted: 0, date: "2015-08-19", created_at: "2015-08-15 12:17:19", updated_at: "2015-08-15 12:17:19">, #<Event id: 5, name: "Sunday BBQ", description: "It will rain", city: "Brussels", accepted: 0, date: "2015-08-17", created_at: "2015-08-15 11:46:44", updated_at: "2015-08-15 12:21:15">, #<Event id: 10, name: "Test num 2", description: "", city: "Brussels", accepted: 0, date: "2015-08-22", created_at: "2015-08-15 12:35:23", updated_at: "2015-08-15 12:35:23">]> 
irb(main):052:0> 
在查看

而且只有记录 - 任何帮助理解为什么发生这种情况?

enter image description here

回答

1

看来你不明白===运营商做。通过使用...你改变你的DateTime对象Range对象:

(DateTime.now.next_week..DateTime.now.next_week.end_of_week).class 
# => Range 

然后你想比较您范围内event.date对象:

<% if event.date === DateTime.now.next_week..DateTime.now.next_week.end_of_week %> 

当然,它返回你false,因为任何日期实例不能等于任何范围实例。您应该使用Range#cover?方法来检查因素在于进入范围:

if (DateTime.now.next_week..DateTime.now.next_week.end_of_week).cover?(event.date) 
+0

否 - 使用范围#包括哪些内容?没有在视图中提供任何记录。但是,也许是因为Range仅适用于* objects *,而我正在这里使用Dates?我试着用<%if(DateTime.now.next_week..DateTime.now.next_week.end_of_week).cover?(event.date)%> http://ruby-doc.org/core-2.2.0/Range .html#method-i-cover-3F并且它似乎解决了这个问题,但仍然不知道为什么你的建议解决方案不起作用,而这一个是的。 – malditojavi

+0

通过使用'...'运算符,您正在创建Range对象。您可以通过输入'(DateTime.now.next_week..DateTime.now.next_week.end_of_week).class'来检查它。这就是为什么你的'==='不起作用。 –

+0

关于我的解决方案。那是我的错,你应该明确地使用'cover?'。不同之处在于'include?'将数组的范围转换为数组,并检查是否有数组元素等于传递的elem。但是'cover?'尝试比较你的对象和range对象的边界来检查它是否在范围内。 –

相关问题