我有一个模型的记录后,说Model
,有一个名为state
柱和四个可能的状态是A
,B
,C
和D
。的ActiveRecord找到一个值的第一个记录某一个值,
是否有可能(用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提供的抽象层的方法。