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对象的边界来检查它是否在范围内。 –