2011-11-06 90 views
0

我有我的車型之一以下方法:Rails的:在範圍方法

def remaining_stock 
    if initial_stock 
     initial_stock - bought_items 
    else 
     0 
    end 
    end 

在控制器方面,我想拉受到有剩餘庫存用戶所擁有的所有項目大於零。因此,簡而言之,像

@remaining_items = Item.where(:user_id => current_user.id).{somehow specify that remaining stock > 0} 

的方法是沿

def has_remaining_stock 
    remaining_stock > 0 
end 

線的東西,但我無法弄清楚如何將它添加到任何查詢本身,或某種(我可以用範圍:條件,但不是其他方法)

任何想法讚賞。

回答

0

簡短的回答是,你不能得到你想要的。請記住,您正在生成SQL以發送到數據庫以獲取項目。 SQL不包括每行運行的Ruby,但您可以使用它來做其他事情。例如:

.where("initial_stock = NULL or (initial_stock - bought_items) > 0") 

應該工作。您可以將它打包爲模型的範圍以獲得更清晰的語義。你只需要在SQL條件下表達函數。

+0

你肯定'initial_stock = NULL'作品?它不應該是'initial_stock IS NULL'嗎?另外,爲什麼檢查它對空att所有? – Frost

0

我想,你可以這樣做就像是以下幾點:

scope :has_remaining_stock, where("(initial_stock - bought_items) > 0)")