有效地检索人员和最近分配给他们的任务

时间:2011-11-15 10:54:20

标签: ruby-on-rails activerecord

我有以下简单的设置:

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

假设分配给某人的任务从未在时间上重叠,

  • 您如何有效地找回每个人最近的工作?
  • 另外,你如何选择截至Date.today,没有工作的所有人?

到目前为止,我已经能够找到具有低效查询和大量ruby代码的解决方案。我想知道ActiveRecord是否提供了惯用的方法来构建这样的搜索。

我想,例如,以这种方式搜索最近的工作:

Task.group(:person_id).maximum(:ended_on)

但我得到的是ActiveSupport :: OrderedHash,而我确实需要Task模型和相关人员。

谢谢! 朱塞佩

1 个答案:

答案 0 :(得分:0)

In Person模型

def last_job
     self.jobs.order("started_on DESC").limit(1)
end

您可以编写scope来过滤未完成的“开放”作业的作业:

scope :finished_jobs, where("ended_on IS NOT NULL")
scope :unfinished_jobs, where("ended_on IS NULL")

所以你也可以这样做

def is_unemployeed?
     self.jobs.unfinished_jobs.empty?
end