【问题标题】:Query two different models in a separate model Rails在单独的模型 Rails 中查询两个不同的模型
【发布时间】:2020-09-23 22:59:22
【问题描述】:

我正在尝试从两个不同的模型中查询信息。我有 3 个模型,CompanyUserEmployment UserCompany 之间的关系通过 Employment 是多对多的。这意味着我的User 表中没有company_id 列,就在Employment 表中。

Company.where(category: Company::FIRMS).where(company_tier_id: 1).includes(:directory_las, :directory_associates, :directory_lats).order(name: :asc)

has_many :directory_affiliates, -> { where(member_category_id: [5, 14]).order(:user_id)}, class_name: 'User'(this is run on the Company model)

这是我在视图上运行以触发上述查询的代码:

- if company.directory_affiliates.present?
        %h4.company-detail-heading Affiliates
        - company.directory_affiliates.each do |user|
          = user
          %br

查询重现以下 SQL 查询:

Company Load (1.4ms)  SELECT "companies".* FROM "companies" WHERE "companies"."category" = $1 AND "companies"."company_tier_id" = $2 ORDER BY "companies"."name" ASC  [["category", "Landscape Architecture Firms"], ["company_tier_id", 1]]
  User Load (1.0ms)  SELECT "users".* FROM "users" WHERE "users"."member_category_id" IN (1, 2, 7, 8, 9, 15) AND "users"."company_id" IN (30, 211, 104, 88, 89, 135, 6, 32, 127, 13, 77, 268) ORDER BY "users"."first_name" ASC

如何重新编写查询,以便我可以从employments 表中获取company_id 查询?非常感谢任何回应。

【问题讨论】:

  • join 表格,您可以过滤数据。

标签: ruby-on-rails postgresql activerecord rails-activerecord


【解决方案1】:

我发现问题出在我使用 include 而不是 joins 因为关联的变化。这非常有效:

Company.where(category: Company::FIRMS).where(company_tier_id: 1).joins(:directory_las, :directory_associates, :directory_lats).order(name: :asc)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多