【发布时间】:2016-12-09 08:40:22
【问题描述】:
所以我们有这样的案例(多对多通过):
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返回所有公司及其合同
更多细节例如 =>
我们有subscriber_id
所以现在我们可以找到需要关联的公司
Company.includes(:contracts).where(contracts: {subscriber_id: params[:id]})
但它只返回需要关联的公司,但我们需要返回所有公司
预期结果
1) 返回所有公司
2) 公司 company[0].contracts 的每个实例应仅返回与关联订阅者的合同或返回空数组
所以我们可以构建这样的 json 并排除合约块中的 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
【问题讨论】:
标签: mysql ruby-on-rails database activerecord rails-activerecord