我正在使用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)
答案 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,那将会很棒。