【问题标题】:Convert this code into active record/sql query将此代码转换为活动记录/sql 查询
【发布时间】:2012-09-19 21:51:48
【问题描述】:

我有以下代码,想将请求转换为 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

【问题讨论】:

    标签: mysql ruby-on-rails activerecord


    【解决方案1】:

    不知道是否可以让company_active?谓词单个 SQL 查询,但我可以提供替代方案:

    如果你这样做:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-10
      • 2018-11-20
      • 2015-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-24
      • 1970-01-01
      相关资源
      最近更新 更多