gpt4 book ai didi

mysql - Rails 5 返回所有记录并包括必要的关联

转载 作者:搜寻专家 更新时间:2023-10-30 23:36:50 25 4
gpt4 key购买 nike

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

  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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com