2012-11-03 31 views
2

我有以下mysql查詢工作正常。快速的背景故事,這通過花費的總金額列出我們的客戶。移動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 

我試圖將這個移動到客戶模型,作爲範圍和子類,但我失敗了。我對Rails(以前的客戶端)有點新,但我認爲我很接近。希望你們能指引我正確的方向。提前致謝!!!

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 )

+0

「失敗」不是很具描述性。你有錯誤信息嗎?你有其他的問題在這個框架中工作嗎?他們有什麼不同? –

+0

對不起!嘗試此操作時遇到錯誤。儘管我的語法肯定有問題。當我嘗試一個範圍時,我在group_by附近出現錯誤。 BLAH。我使用@high_bidders = Customer.find_by_sql將它移動到了一個控制器中(<< - SQL並且它可以工作;但是我知道這是一個糟糕的方法,而且應該存在於模型中 – jahrichie

回答

1

我假設你的型號名稱是客戶和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 
+0

是的,表名是全部打開的。我繼承的堆棧,我明天會試試,儘快回到這篇文章。 – jahrichie