Rails:范围内的方法

时间:2011-11-06 06:47:28

标签: ruby-on-rails activerecord scope

我的一个模型上有以下方法:

  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

但我无法弄清楚如何将它添加到查询本身,或者某种范围内引入has_remaining_stock(我的范围可以:条件,但不是其他方法)

任何想法都赞赏。

2 个答案:

答案 0 :(得分:0)

简短的回答是你无法得到你想要的东西。请记住,您正在生成要发送到数据库以获取项目的SQL。 SQL不包括每行运行的Ruby,但您可以使用它来执行其他操作。类似的东西:

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

应该有效。您可以将其打包为模型中的范围以获得更清晰的语义。您只需要在SQL条件下表达该函数。

答案 1 :(得分:0)

我认为你可以这样做如下:

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