所以我们有这样的情况(多对多通过):
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 返回所有公司及其契约(Contract)
更多细节例如=>
我们有 subscriber_id
所以现在我们可以获得具有所需关联的公司
Company.includes(:contracts).where(contracts: {subscriber_id: params[:id]})
但它只返回需要关联的公司,但我们需要返回所有公司
预期结果
1) 返回所有公司
2) companys[0].contracts 的每个实例应该只返回与关联订阅者的契约(Contract)或返回空数组
所以我们可以构建这样的 json 并排除契约(Contract) block 中的 if 条件:
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
最佳答案
也许试试这样的东西
Company.joins('LEFT JOIN contracts ON companies.id = company_id').where(contracts: {subscriber_id: params[:id]})
关于mysql - Rails 5 返回所有记录并包括必要的关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41056299/