查询多对多关系筛选(按多对多表筛选),但按关联表的字段排序



我正在尝试通过过滤多对多表中的某个字段来查询多对多关系,同时按关联表中的字段排序。

如何获取特定公司的所有活跃firm_emps并按用户名订购firm_emps?

用户.rb

Class User < ApplicationRecord
 has_many :firm_emps, :dependent => :destroy
 has_many :firms, through: :firm_emps
end

用户.rb 迁移文件

...
t.string :name
t.boolean :active
...

firm_emp.rb

Class FirmEmp < ApplicationRecord
 belongs_to :firm
 belongs_to :user
end

firm_emp.rb 的迁移文件

...
 t.belongs_to :user, index: true
 t.belongs_to :firm, index: true
 t.boolean :admin, default: false
 t.boolean :active, default: true
...

公司.rb

Class Firm < ApplicationRecord
 has_many :firm_emps, dependent: :destroy
 has_many :users, through: :firm_emps
end

Firm.rb 的迁移文件

...
t.string :full_name
t.boolean :active
...

我在 rails 控制台中尝试了以下查询:

f = Firm.first
f.users.where(active: true).order('users.name asc')
# But this filters on User's table field active: true and not the FirmEmps table field active: true
f.users.joins(:firmemps).where(active: true).order('users.name asc')
# Just doesn't work
f.firm_emps.active.order('firm_emps.active')
# But i can't order by user's field 'name'

编辑:@PragyaSriharsh和@ArunEapachen的回答奏效了。

试试看:

f.users.joins(:firm_emps).where('firm_emps.active=?', true).order('users.name asc') 

如果不起作用,请使用sort_by方法。

尝试以下操作。

f = Firm.first
f.users.where('firm_epms.active = ?' , true).order('users.name asc')

最新更新