Как объединить два прицела с ИЛИ

У меня есть лента тегов и лента друзей. Я хочу объединить эти две вещи и создать окончательный фид «все».

Для ленты друзей:

class Post < ActiveRecord::Base
  scope :friendfeed, lambda{|x| followed_by}

  def self.followed_by(user)
    where("user_id IN (?) OR user_id = ?", user.watched_ids, user.id)
  end
end

Для ленты тегов:

class Post < ActiveRecord::Base
  scope :tagfeed, lambda{|x| infatuated_with}

  def self.infatuated_with(user)
    joins(:attachments).where("attachments.tag_id IN (?)", user.tags).select("DISTINCT pages.*")
  end
end

И я бы вызвал что-то вроде этого из контроллера (я использую гем Kaminari для разбиения на страницы):

@tag_feed = Post.tagfeed(current_user).page(params[:page]).per(21)
@friend_feed = Post.friendfeed(current_user).page(params[:page]).per(21)

Теперь я хочу иметь универсальную ленту, но я потерян. Области предназначены для сужения, но в этом случае я пытаюсь выполнить операцию ИЛИ. Выполнение таких вещей, как

@mother_of_all_feed = @tag_feed + @friend_feed

, было бы избыточным, и я не смог бы контролировать количество сообщений, отображаемых на одной странице. Как я могу это сделать? Спасибо!

Кстати, для тегов у меня ассоциация настроена так:

class Post < ActiveRecord::Base
  has_many :attachments
  has_many :tags, :through => :attachments
end

class Tag < ActiveRecord::Base
  has_many :attachments
  has_many :posts, :through => :attachments
end

class Attachment < ActiveRecord::Base
  belongs_to :tag
  belongs_to :post
end
23
задан user2262149 16 August 2018 в 20:59
поделиться