1

我有几个模型belong_to :status

状态是:

  • 积极的
  • 禁止

我为每个状态设置了范围,它们适用于用户和其他几个内容模型,但让我们举个User例子。

出于习惯,我写User.find(15)or User.allor or User.last(5)or@category.users

我认为不应该有任何理由改变这一点。事实上,称我为自私,但我不想改变这一点。我觉得我应该能够在更高的层次上处理这类任务,并且避免一遍又一遍地重新输入:

  • User.active.where(...)
  • User.active
  • User.active.last(5)
  • @category.users.active

这似乎不合常规。不幸的是,这些模型在许多情况下都使用,所以我想要一种方法,也许在模型级别,预先筛选被禁止或隐藏的模型。例如,从all范围中删除被禁止的实例,以及“last”之类的范围或一般查询模型时。或者,如果专门调用了属于禁止或隐藏范围的实例,它会引发一条未找到的记录。我仍然希望能够通过它们各自的作用域(例如User.bannedor User.hidden)访问这些实例,但我宁愿是额外的输入,而不是最常用的查询。

4

1 回答 1

2

您需要定义一些范围

default_scope joins(:status).where(:status => {:state => :active})
scope :hidden, unscoped.joins(:status).where(:status => {:state => :hidden})
于 2012-04-04T04:04:27.727 回答