2013-03-01 45 views
0

我有一個模型的記錄後,說Model,有一個名爲state柱和四個可能的狀態是ABCD的ActiveRecord找到一個值的第一個記錄某一個值,

是否有可能(用ActiveRecord)寫在Model類容納該發現的created_at時間的B記錄的是由前面最新發生單個查詢的方法的A(可以有其它CD記錄)。如果表格中沒有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提供的抽象層的方法。

回答

相關問題