Запрашивает фильтрацию отношений «многие ко многим» по таблице «многие ко многим», но упорядочивает по полю связанной таблицы. - PullRequest
0 голосов
/ 28 апреля 2019

Я пытаюсь найти запрос для отношения «многие ко многим» с фильтрацией определенного поля в таблице «многие ко многим» при упорядочении по полю в связанной таблице.

Как мне получить все активные 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 сработали.

Ответы [ 2 ]

0 голосов
/ 29 апреля 2019

Попробуйте:

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

Если это не работает, используйте метод sort_by.

0 голосов
/ 28 апреля 2019

Попробуйте следующее.

f = Firm.first
f.users.where('firm_epms.active = ?' , true).order('users.name asc')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...