我有一個模型的記錄後,說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提供的抽象層的方法。