繁体   English   中英

Rails:范围内的方法

[英]Rails: Methods in scopes

我的一种模型具有以下方法:

  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(我可以使用:conditions进行范围调整,但不能使用其他方法进行范围调整)

任何想法表示赞赏。

简短的答案是,您无法获得想要的东西。 记住,您正在生成要发送到数据库以获取项目的SQL。 SQL不包括按行运行的Ruby,但是您可以使用它来做其他事情。 就像是:

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

应该管用。 您可以将其打包为模型的作用域,以获得更清晰的语义。 您只需要在SQL条件下表达该函数即可。

我想您可以执行以下操作:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM