我有活动,有日期和名字,有很多分钟
我需要找到按日期排在第一位的所有事件,以获得给定的名称,然后收集与这些事件相关的所有分钟。
Event.order(date: :asc).uniq_by(&:name).map(&:minutes).flatten
几乎有效。除了我最终得到一个数组,而不是一个ActiveRecord :: Relation,我真的想从Minute开始并将它变成像...这样的范围Minute.first_time_events()给了我所有来自事件的分钟这是第一个按日期命名的事件。
最后一点需要注意,我正在使用rails 3.2。感谢
答案 0 :(得分:1)
如果您不介意在您的应用中使用原始sql,则可以通过一次通话完成所有操作
Minute.where(event_id: Event.joins(
"INNER JOIN (SELECT url, MIN(date) AS minDate FROM events GROUP BY name) groupedEvents ON events.name = groupedEvents.name AND events.date = groupedEvents.minDate"
))
如果你不介意给db打两次电话,那么我肯定会考虑到Max的建议的可读性
ids = Event.order(date: :asc).uniq_by(&:name).map(&:id)
minutes = Minute.where(event_id: ids)
答案 1 :(得分:0)
我会拉出事件的ids
,然后在范围内使用它来获取分钟。
ids = Event.uniq(:name).order(date: :asc).ids
minutes = Minute.joins(:event).where(events: { id: ids })
这里需要注意的是,这就是我在Rails 4中的表现。一些向后移植可能是必要的,但你应该专注于更新你的应用程序,因为3.2现在任何一天都将成为EOL。