Rails 5返回所有记录并包含必要的关联

时间:2016-12-09 08:40:22

标签: mysql ruby-on-rails database activerecord rails-activerecord

所以我们有这样的情况(通过很多次):

  class Company < ActiveRecord::Base
    has_many :contracts
    has_many :subscribers, through: :contracts
  end

  class Contract < ActiveRecord::Base
    belongs_to :company
    belongs_to :subscriber
  end

  class Subscriber < ActiveRecord::Base
    has_many :contracts
    has_many :companies, through: :contracts
  end

请通过subscriber_id

帮助我们退回所有公司及其合同

更多细节,例如=&gt;

我们有subscriber_id

所以现在我们可以获得需要关联的公司

Company.includes(:contracts).where(contracts: {subscriber_id: params[:id]})

但它的回归公司只是需要协会,但我们需要归还所有公司

预期结果

1)退回所有公司

2)公司[0] .contracts的每个实例应仅返回与协会订户的合同或返回空数组

因此我们可以构建这样的json并排除合同中的条件阻止:

json.data do
  json.companies @companies do |company|
    json.id company.id
    json.name company.name
    json.full_name company.full_name
    json.owner company.owner, :name, :email, :phones
    json.contracts company.contracts do |contract| # => should return contract by subscriber_id or empty array
      json.id contract.id
      json.company_id, contract.company_id
      json.status contract.status
    end
  end
end

1 个答案:

答案 0 :(得分:1)

也许尝试这样的事情

Company.joins('LEFT JOIN contracts ON companies.id = company_id').where(contracts: {subscriber_id: params[:id]})