我正在尝试查询来自两个不同模型的信息。我有3个模型,Company
,User
和Employment
User
和Company
之间的关系是通过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
?我将非常感谢任何回应。
我发现问题是我使用了include
joins
,因为关联的变化。这非常有效:
Company.where(category: Company::FIRMS).where(company_tier_id: 1).joins(:directory_las, :directory_associates, :directory_lats).order(name: :asc)