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