User
имеет много Posts
Post
имеет много Comments
User
имеет много Comments
class Post < ApplicationRecord
..stuff...
scope :created_by, ->(user) { where(creator: user) }
scope :with_comments_by, ->(user) { joins(:comments).where('comments.creator_id = ?'. user.id) }
##########========= this is my failure:
scope :related_to, ->(user) { created_by(user).or(with_comments_by(user) }
(немои настоящие модели, просто придерживающиеся базовой структуры SO)
Эта последняя область не работает, так как ясно отмечено :
Два отношения должныбыть структурно совместимыми, они должны охватывать одну и ту же модель, и они должны отличаться только ГДЕ или ИМ.
Итак, как мне обойти это?( пожалуйста не говорите грязного, длинного предложения SQL)
Я хочу иметь возможность позвонить Posts.related_to(user)
и получить одну коллекцию ActiveRecord всех сообщений, которые пользователь создал или прокомментировал .
Я шел по этому пути, но я знаю, что это извращение:
class Post < ApplicationRecord
..stuff...
scope :created_by, ->(user) { where(creator: user) }
scope :with_comments_by, ->(user) { joins(:comments).where('comments.creator_id = ?'. user.id) }
##########========= this is my failure:
# scope :related_to, ->(user) { created_by(user).or(with_comments_by(user) }
def self.related_to(user)
ary = []
ary << Post.created_by(user).map(&:id)
ary << Post.with_comments_by(user).map(&:id)
Post.find(ary.uniq)
# so...bad...so yucky
end
Помогите мне, ТАК сообщество.Я в ловушке в своем собственном уме.