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

标签 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 返回所有公司及其契约(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/

相关文章:

mysql - SQL查询获取两周之间的数据?

java - 如何在 Spring MVC 中解决 HTTP 404 状态?

ruby-on-rails - content_for与部分 yield

ruby-on-rails - Rails-将html模板存储在文件系统或数据库中

mysql - 从 {invalid_table} 中选择 invalid_field

php - 带有巨大表的嵌套 mysql 查询

mysql - 如果删除了子项,则自动删除父项

ruby-on-rails - 如何使用 koala gem get_object 函数获取 facebook 帖子的点赞数

MYSQL-显示受聘年限

mysql - 数据库设计: Two "1 to many" relationship?