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 %>
注意,我也嘗試添加一個 ''查詢如:
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>
在查看
而且只有記錄 - 任何幫助理解爲什麼發生這種情況?
否 - 使用範圍#包括哪些內容?沒有在視圖中提供任何記錄。但是,也許是因爲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
通過使用'...'運算符,您正在創建Range對象。您可以通過輸入'(DateTime.now.next_week..DateTime.now.next_week.end_of_week).class'來檢查它。這就是爲什麼你的'==='不起作用。 –
關於我的解決方案。那是我的錯,你應該明確地使用'cover?'。不同之處在於'include?'將數組的範圍轉換爲數組,並檢查是否有數組元素等於傳遞的elem。但是'cover?'嘗試比較你的對象和range對象的邊界來檢查它是否在範圍內。 –