0

次のコードがあり、リクエストを 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
4

1 に答える 1

1

company_activeにすることができるかどうかわかりませんか? 単一の SQL クエリを述語しますが、別の方法を提供できます。

もしあなたがそうするなら:

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

関連する注文はすべて、将来の処理のためにメモリにロードされます。

これにより、2 を除くすべてのクエリが削除されます。

1 つは会社を取得するためのもので、もう 1 つは関連するすべての注文を取得するためのものです。

于 2012-09-19T13:51:48.040 に答える