我有以下简单的设置:
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,而我确实需要Task模型和相关人员。
谢谢! 朱塞佩
答案 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