2013-03-01 42 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提供的抽象层的方法。

回答

相关问题