从所有范围隐藏给定状态的activerecord对象

时间:2014-12-19 18:28:40

标签: ruby-on-rails activerecord

在具有许多不同范围的Post模型中(按日期间隔,按作者或内容,总帖子总数),模型包含status属性,如果给定状态为{{ 1}}然后它将被排除在所有范围之外(例如,总帖子范围的总和将返回状态不同于隐藏的总帖子),是否有“DRYer”#39;这样做的方法,而不是向每个范围添加:hidden之类的东西?

2 个答案:

答案 0 :(得分:1)

您可以创建“父作用域”:

scope :hidden, -> { where(status: :hidden) }

然后在您要隐藏的范围内,将其添加到where

scope :foo, -> { hidden.where(foo: :bar) }

答案 1 :(得分:0)

你可以这样做:

default_scope { where.not(status: :hidden) }

它不是钢制的,默认范围仍然是范围,如果您需要绕过这种情况,可以使用unscoped删除:

scope :hidden { unscoped.where(status: :hidden) }

Reference