我有两种型号
company.rb
class Company < ApplicationRecord
has_many :posts
end
post.rb
class Post < ApplicationRecord
belongs_to :company
scope :notClosed, -> {where(closed: false)}
scope :published, -> {where(published: true)}
end
我想获取一家公司,该公司至少有一个职位与匹配的职位scope
当前我的查询是
Company.where(company_type: "Private").all
返回所有公司,但如何根据我的需求修改此查询。
答案 0 :(得分:0)
published_post_companies = Company.joins(:posts).distinct.merge(Post.published)
notClosed_post_companies = Company.joins(:posts).distinct.merge(Post.notClosed)
答案 1 :(得分:0)
这将使您所有公司(一次)拥有至少一个“未关闭”的职位:
Company.includes(:posts).joins(:posts).where(company_type: "Private").merge(Post.notClosed)
答案 2 :(得分:-1)
Rails的显式方式:从Post
范围获取公司的ID,然后查询这些ID:
Company.where(id: Post.published.pluck(:company_id).uniq)
但是请注意,如果您有大量的帖子,这可能会很昂贵。使用SQL可能会有更有效的方法。