如何根据孩子的记录取回父母

时间:2018-07-02 03:40:26

标签: ruby-on-rails ruby

我有两种型号

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

返回所有公司,但如何根据我的需求修改此查询。

3 个答案:

答案 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可能会有更有效的方法。