我有以下代码,并希望将请求转换为mysql查询。现在,我对数据使用手动.select(数组方法)达到了预期的结果。只需一个查询就可以实现(如果我输入错误,请纠正我)。

当前代码:

  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

最佳答案

我不知道是否有可能使company_active?断言单个SQL查询,但我可以提供另一种选择:

如果您这样做:

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


所有相关订单将被加载到内存中,以备将来处理。

这将消除除2之外的所有查询:

一个获得公司,另一个获得所有相关订单。

关于mysql - 将此代码转换为事件记录/SQL查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12495994/

10-11 03:31
查看更多