使用acts_as_follower创建Feed

时间:2012-12-04 20:27:13

标签: ruby-on-rails-3

我有三个模特

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}

This answer很接近,但不是我想要的。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您是否尝试过使用订单?

User.find(1).following_places.includes(:events).order('events.startdate ASC')