在单独的模型 Rails 中查询两个不同的模型



我正在尝试查询来自两个不同模型的信息。我有3个模型,CompanyUserEmploymentUserCompany之间的关系是通过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?我将非常感谢任何回应。

我发现问题是我使用了includejoins,因为关联的变化。这非常有效:

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

最新更新