我有一个模型,比如说Model
,它有一个名为 的列state
,四种可能的状态是A
、B
、C
和D
。
是否可以(使用 ActiveRecord)在Model
类中编写一个方法,该方法包含一个查询,该查询查找最近出现的记录的created_at
时间,该B
记录的时间前面有一个A
(中间可以有其他C
记录D
)。如果表中没有A
',则返回最早出现的B
。
表的默认范围是created_at DESC
,因此调用Model.first
将是表中的最新记录。
目前,这是我的方法:
class Model < ActiveRecord::Base
def self.getLatestBTime
latestA = self.where("state = ?", "A").first # Record of most recent "A"
while 1
if !latestA.nil?
nextB = self.where("state = ? AND created_at > ?", "B", latestA.created_at).last # Record of the first "B" after the most recent "A"
return nextB.created_at if !nextB.nil?
else
break
end
latestA = self.where("state = ? AND created_at < ?", "A", latestA.created_at).first
end # End while
firstB = self.where("state = ?", "B").first
if !firstB.nil?
return firstB.created_at
else
return nil
end
end
end
但我试图找到一种对 ActiveRecord 的“一体化”查询方式,因此我将尽可能多的工作卸载到数据库而不是应用程序。有什么建议么?
此外,还没有选择部署数据库,它可以是最有意义的(当前部署到 Heroku,所以 PostgresQL 是当前用于生产测试的),但我真的很想远离存储过程以及其他将移除 ActiveRecord 提供的抽象层的方法。