Я изо всех сил пытаюсь сделать так, чтобы Ruby на Rails выполнял этот запрос правильно ... короче: присоединиться к отношению has_many
, но только через самую последнюю запись в этом отношении и затем можно применить фильтр / выбрать к этому отношению.
Вот очень простой вариант, который отражает мою борьбу:
Допустим, у меня есть таблица Employees
и таблица Employments
. employee has_many employments
. employment
имеет status
из :active
или :inactive
.
class Employee < ActiveRecord::Base
has_many :employments
end
class Employment < ActiveRecord::Base
belongs_to :employee
end
Для простоты, скажем, есть один employee
: Дэн, и у него есть два employments
: старый (created_at
) :inactive
и новый :active
.
dan = Employee.create(name: 'Dan')
Employment.create(employee: dan, created_at: 2.years.ago, status: :inactive)
Employment.create(employee: dan, created_at: 3.months.ago, status: :active)
Таким образом, вы можете сказать: «Дэн работал дважды и в настоящее время активно busy. "
Я хочу, чтобы запрос Rails сказал:" найди мне неактивных сотрудников ". И это должно вернуть пустой набор, потому что Dan latest employment
равен :active
. Поэтому я не могу просто сделать: Employee.joins(:employments).where(employments: { status: :inactive })
, потому что он будет соответствовать old employment
и, таким образом, вернет запись Dan employee
.
Мне нужен способ сказать: " найти неактивных сотрудников на основании только самой последней записи о занятости ".
Но я не знаю, как это сделать в Rails.
Я чувствую, что Я что-то упускаю ... это должно быть довольно просто ... но я не могу понять это.
Спасибо!