активная запись - получить связанные записи из has_and_belongs_to_many и has_many - PullRequest
0 голосов
/ 03 февраля 2019

Я использую активную запись ruby ​​

class Blog < ActiveRecord::Base
  has_and_belongs_to_many :users
end

class User < ActiveRecord::Base
  has_and_belongs_to_many :blogs
  has_many :posts
  has_many :comments
end

class Post < ActiveRecord::Base
  belongs_to :user
end

class Comment < ActiveRecord::Base
  belongs_to :user
end

Как получить пользователей блога, которые имеют по крайней мере 1 сообщение или 1 комментарий

что-то вроде этого в псевдокоде

Blog.users.where(posts.count > 1 || comments.count > 1)

1 Ответ

0 голосов
/ 04 февраля 2019

Я полагаю, что вы должны быть в состоянии использовать следующее, хотя не смогли протестировать:

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, это было бы здорово.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...