我有三个模型
class Place < ActiveRecord::Base
acts_as_followable
has_many :events
end
class Event < ActiveRecord::Base
attr_accessible :startdate
acts_as_followable
belongs_to :place
belongs_to :user
end
class User < ActiveRecord::Base
acts_as_followable
acts_as_follower
has_many :events
end
我需要做两件事:
- 为关注的地点或用户获取同质排序的事件列表
- 为关注的地点、用户和事件获取同质排序的事件列表,没有重复
所以例如
User.find(1).following_places.includes(:events).collect{|p| p.events}.flatten.sort{|a,b| a.startdate <=> b.startdate}
应该返回用户关注的所有地点的事件列表,按日期排序。如果我理解正确的话,这个问题是收集、展平和排序发生在 ruby 而不是 SQL 中。
第二部分应该如下所示,理想情况下也完全出现在 SQL 中:
user = User.find(1)
(user..following_places.includes(:events).collect{|p| p.events}.flatten +
user.following_users.includes(:events).collect{|p| p.events}.flatten +
user.following_events).sort{|a,b| a.startdate <=> b.startdate}
这个答案很接近,但不是我想要的。
谢谢你的帮助!