2012-04-20 103 views
0

我正試圖找到一種在範圍內設置虛擬屬性的方法。背景是我有客戶誰屬於帳戶。客戶可以購買銷售項目。我有一張表customers_salesitem,顯示哪些客戶過去曾購買過哪些產品。在範圍中設置虛擬屬性

我想要生成一個salesitems列表,其中包含一個額外字段'category',用於將銷售項目分類爲由客戶購買的產品,由不同客戶從同一個帳戶購買的產品以及那些帳戶中的任何人都沒有購買。最終,我想將範圍用於自動填充字段,但目前有點關閉。儘管SQL正確生成範圍沒有類別返回一個項目列表

class Salesitem < ActiveRecord::Base 
    has_many :customers_salesitems 

    scope :previous_customer_purchase, lambda { 
     |customer| 
     select("*"). 
     select("'Previous Customer Purchase' as category"). 
     where ("salesitems.id IN (SELECT customers_salesitems.salesitem_id FROM customers_salesitems WHERE customer_id = ?)", 
      customer.id)   
    } 

    def category 
     @category 
    end 

    def category=(value) 
     @category = @attributes["category"] = value 
    end 
end 

我已經嘗試了一些東西的線沿線。

回答

0

儘管where方法和其他一些新的Rails 3查詢方法可以與累積效果鏈接在一起,但有些方法不會合並。我不認爲選擇方法合併。不幸的是,這些新功能的大部分都沒有很好的記錄。對於選擇文檔

select(value = Proc.new) 

我想你會需要的是:

scope :previous_customer_purchase, lambda { 
    |customer| 
    select("*, 'Previous Customer Purchase' as category"). 
    where ("salesitems.id IN (SELECT customers_salesitems.salesitem_id FROM customers_salesitems WHERE customer_id = ?)", 
     customer.id)   
}