2011-11-06 69 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)")