2

次のmysqlクエリがうまく機能しています。簡単な裏話です。これは、顧客を合計金額でリストします。

SELECT  SUM(price) AS money_spent, co.customer_id, cu.first_name, cu.last_name, cu.email_primary
FROM customer_order AS co 
JOIN customer AS cu ON (cu.customer_id = co.customer_id) 
GROUP BY co.customer_id
ORDER BY money_spent DESC

これをスコープとサブクラスとして顧客モデルに移動しようとしましたが、両方の方法で失敗しました。私はレール(以前はクライアント側)に少し慣れていませんが、近いと思います。皆さんが私を正しい方向に向けてくれることを願っています。前もって感謝します!!!

def self.high_rollers  
  options = {
      :select   => "SUM(price) AS money_spent, co.customer_id, cu.first_name, cu.last_name, cu.email_primary",
      :from     => "customer_order AS co",
      :joins    => "customer AS cu ON (cu.customer_id = co.customer_id)",
      :group_by => "co.customer_id",
      :order    => "money_spent DESC"
            }   

このコントローラーのインデックス アクションに次のコードを挿入すると機能しますが、適切なアプローチとは思えません。

@high_bidders = Customer.find_by_sql(<<-SQL
       SELECT  SUM(price) AS money_spent, co.customer_id, cu.first_name, cu.last_name, cu.email_primary
       FROM customer_order AS co 
       JOIN customer AS cu ON (cu.customer_id = co.customer_id) 
       GROUP BY co.customer_id
       ORDER BY money_spent DESC

SQL )

4

1 に答える 1

1

モデル名は Customer と CustomerOrder だと思います。あなたのテーブル名は慣習的ではありません.self.table_nameを使用してモデルにテーブル名を明示的に設定していると思います.

class CustomerOrder < ActiveRecord::Base
  # ...
  belongs_to :customer

  scope :high_rollers, select("*, SUM(price) AS money_spent").
                       joins(:customer).
                       group(:customer_id).
                       order("money_spent DESC")
end
于 2012-11-03T21:49:19.303 に答える