У меня есть следующие простые настройки:
create_table "people", :force => true do |t|
t.string "name"
end
create_table "tasks", :force => true do |t|
t.string "description"
t.integer "person_id"
t.date "started_on"
t.date "ended_on"
end
class Person < ActiveRecord::Base
has_many :tasks
end
class Task < ActiveRecord::Base
belongs_to :person
end
Предполагая, что задачи, назначенные человеку, никогда не пересекаются во времени,
- Как бы вы эффективно извлекли самую свежую работу каждого человека?
- Кроме того, как бы вы выбрали всех людей, которые на сегодняшний день не имеют работы?
До сих пор мне удавалось находить решения с неэффективными запросами и большим количеством кода ruby. Вместо этого мне интересно, предлагает ли ActiveRecord идиоматические способы построения таких поисков.
Я подумал, например, чтобы искать самые последние вакансии таким образом:
Task.group(:person_id).maximum(:ended_on)
но я получаю ActiveSupport :: OrderedHash, тогда как мне нужны модели задач и связанные с ними люди.
Спасибо!
Джузеппе