所以我们有这样的情况(通过很多次):
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
答案 0 :(得分:1)
也许尝试这样的事情
Company.joins('LEFT JOIN contracts ON companies.id = company_id').where(contracts: {subscriber_id: params[:id]})