我有几个模型belong_to :status
。
状态是:
- 积极的
- 隐
- 禁止
我为每个状态设置了范围,它们适用于用户和其他几个内容模型,但让我们举个User
例子。
出于习惯,我写User.find(15)
or User.all
or or User.last(5)
or@category.users
我认为不应该有任何理由改变这一点。事实上,称我为自私,但我不想改变这一点。我觉得我应该能够在更高的层次上处理这类任务,并且避免一遍又一遍地重新输入:
User.active.where(...)
User.active
User.active.last(5)
@category.users.active
这似乎不合常规。不幸的是,这些模型在许多情况下都使用,所以我想要一种方法,也许在模型级别,预先筛选被禁止或隐藏的模型。例如,从all
范围中删除被禁止的实例,以及“last”之类的范围或一般查询模型时。或者,如果专门调用了属于禁止或隐藏范围的实例,它会引发一条未找到的记录。我仍然希望能够通过它们各自的作用域(例如User.banned
or User.hidden
)访问这些实例,但我宁愿那是额外的输入,而不是最常用的查询。