2015-08-15 47 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對象的邊界來檢查它是否在範圍內。 –

相關問題