スコープに仮想属性を設定する方法を見つけようとしています。背景は、アカウントに属する顧客がいます。顧客は販売アイテムを購入できます。過去にどの顧客がどの商品を購入したかを示すテーブル customers_salesitem があります。
販売アイテムを、顧客が購入したもの、同じアカウントの別の顧客が購入したもの、および購入していないものに分類する追加フィールド「カテゴリ」を使用して、販売アイテムのリストを生成したいと思います。アカウントの誰でも購入できます。最終的には、スコープをオートコンプリート フィールドに使用したいのですが、現時点では少しずれています。
私は次の行に沿っていくつかのことを試しました:
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
SQL は正しく生成されますが、スコープはカテゴリのないアイテム リストを返します。