活动记录-从has_and_belongs_to_many和has_many获取相关记录

时间:2019-02-03 05:15:24

标签: ruby-on-rails ruby activerecord

我正在使用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用户

类似的伪代码

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

1 个答案:

答案 0 :(得分:0)

我相信您应该可以使用以下内容,尽管尚未能够进行测试:

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,那将会很棒。

相关问题