我正在尝试查询多对多关系,同时对多对多表中的某个字段进行过滤,同时按关联表中的字段排序。
我如何获取特定公司的所有活跃的firm_emps并通过用户名订购firm_emps?
user.rb
Class User < ApplicationRecord
has_many :firm_emps, :dependent => :destroy
has_many :firms, through: :firm_emps
end
user.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
...
firm.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的答案有效。
答案 0 :(得分:0)
尝试:
f.users.joins(:firm_emps).where('firm_emps.active=?', true).order('users.name asc')
如果不起作用,请使用sort_by方法。
答案 1 :(得分:-1)
尝试以下操作。
f = Firm.first
f.users.where('firm_epms.active = ?' , true).order('users.name asc')