2

我有三个模型

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}

这个答案很接近,但不是我想要的。

谢谢你的帮助!

4

1 回答 1

0

您是否尝试过使用订单?

User.find(1).following_places.includes(:events).order('events.startdate ASC')
于 2012-12-20T16:09:19.980 回答