Я полагаю, что вы должны быть в состоянии использовать следующее, хотя не смогли протестировать:
users = Blog.users
users.left_outer_joins(:posts).where.not(posts: { user_id: nil })
.or(
users.left_outer_joins(:comments).where.not(comments: { user_id: nil })
)
# or if you're on Rails < 5
query = <<-SQL
SELECT users.* from users
LEFT OUTER JOIN posts ON posts.user_id = users.id
LEFT OUTER JOIN comments ON comments.user_id = users.id
WHERE posts.user_id IS NOT NULL
OR comments.user_id IS NOT NULL
SQL
users.where(query)
В двух словах, это настаивает на том, что есть сообщение и комментарий с user_id
присутствует в запросе.Это определенно работает при проверке существования одной ассоциации, хотя я не пробовал использовать or
.
. У меня сейчас работает более старая версия Rails, и я хотел бы услышать,это работает так, как я ожидал, поэтому, если бы вы могли сообщить мне, как вы попали на @ user2624242, это было бы здорово.