Rails的:在范围方法
问题描述:
我有我的车型之一以下方法: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
线的东西,但我无法弄清楚如何将它添加到任何查询本身,或某种(我可以用范围:条件,但不是其他方法)
任何想法赞赏。
答
简短的回答是,你不能得到你想要的。请记住,您正在生成SQL以发送到数据库以获取项目。 SQL不包括每行运行的Ruby,但您可以使用它来做其他事情。例如:
.where("initial_stock = NULL or (initial_stock - bought_items) > 0")
应该工作。您可以将它打包为模型的范围以获得更清晰的语义。你只需要在SQL条件下表达函数。
答
我想,你可以这样做就像是以下几点:
scope :has_remaining_stock, where("(initial_stock - bought_items) > 0)")
你肯定'initial_stock = NULL'作品?它不应该是'initial_stock IS NULL'吗?另外,为什么检查它对空att所有? – Frost