2

私は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

私は2つのことをする必要があります:

  • フォローされている場所またはユーザーのイベントの同種のソート済みリストを取得します
  • フォローされている場所とユーザーのイベントの同種のソート済みリストと重複のないイベントを取得します

だから例えば

User.find(1).following_places.includes(:events).collect{|p| p.events}.flatten.sort{|a,b| a.startdate <=> b.startdate}

ユーザーがフォローしているすべての場所のイベントのリストを日付順に並べ替えて返す必要があります。これに関する問題は、私が正しく理解している場合、SQLではなくrubyで収集、フラット化、および並べ替えが行われることです。

2番目の部分は次のようになり、理想的には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

orderを使ってみましたか?

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