我的应用向用户显示活动建议。出现的一个问题是,有时会在一系列事件中有多个具有不同日期的事件,例如:
我想要做的是向用户仅显示一系列事件,其中包含最近的未来开始日期。
我可以编写一个方法来检查事件是否是系列中的第一个:
def first_in_series?
## return true unless self.siblings.count > 0 &&
self.siblings.where(:date => Date.today..self.date).first.present?
end
def siblings
## some method to get events based on the similarity of their titles and attributes
end
然后在我的事件索引中,我可以编写如下内容:
<% future_events.all.each do |e| %>
<% next unless event.first_in_series? %>
<%= event.title %>
<% end %>
但是,当我渲染我的所有活动时,这似乎很费劲。如何使用Active Record Scopes优化此查询?
答案 0 :(得分:2)
我认为范围可能会为您解决:
class Event
has_one :first_sibling, lambda {
joins(:siblings).where('siblings.date >= ?', Date.today).first
}
end
然后,如果我没弄错的话,以下内容应该有效:
<%- future_events.joins(:first_sibling).each do |event| %>
<%= event.title %>
<% end %>