2012-09-19 41 views
0

我有以下代码并希望将请求转换为mysql查询。现在我使用数据上的手动.select(数组方法)实现期望的结果。这应该可能与一个单一的查询(纠正我,如果我错了)。将此代码转换为活动记录/ sql查询

当前代码:

def self.active_companies(zip_code = nil) 
    if !zip_code 
     query = Company.locatable.not_deleted 
    else 
     query = Company.locatable.not_deleted.where("zip_code = ?", zip_code) 
    end 
    query.select do |company| 
     company.company_active? 
    end 
    end 
    # Check if the company can be considered as active 
    def company_active?(min_orders = 5, last_order_days_ago = 15) 
    if orders.count >= min_orders && 
     orders.last.created_at >= last_order_days_ago.days.ago && 
     active 
     return true 
    else 
     return false 
    end 
    end 

说明: 我想找出哪些公司是活跃的。我们有一个公司模型和一个订单模型。

数据: 公司:

  • 活性
  • 的订单(订单相关联)

订单:

  • created_at

回答

1

我不知道是否有可能使company_active?谓语单个SQL查询,但我可以提供一种替代方案:

如果你这样做:

query = Company.locatable.not_deleted.includes(:orders) 

所有相关的订单将被加载到将来处理的内存。

这将消除除2中的所有查询:

一拿到公司,和一个让他们所有的相关订单。