禁止模特

时间:2012-04-04 03:49:52

标签: ruby-on-rails ruby-on-rails-3 activerecord scope

我有几个模型belong_to :status

状态是:

  • 有效
  • 隐藏
  • 禁止

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

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

我认为没有任何理由可以改变这种情况。事实上,叫我自私,但我想要来改变它。我觉得我应该能够在更高的层次上处理这类任务,并避免不得不一遍又一遍地重新打字:

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

这似乎是非常规的。不幸的是,这些模型在很多实例中都被使用,因此我想在模型级别上预先设置禁用或隐藏模型的预览。例如,从all范围中删除禁止的实例,但是除了“last”之外的范围或者一般查询模型时。或者,如果某个实例被特定地调用,并且具有禁止或隐藏的范围,则会引发未找到的记录。我仍然希望能够通过各自的范围(例如User.bannedUser.hidden)访问这些实例,但我宁愿 是额外的输入,而不是最常用的查询。

1 个答案:

答案 0 :(得分:2)

您需要定义一些范围

default_scope joins(:status).where(:status => {:state => :active})
scope :hidden, unscoped.joins(:status).where(:status => {:state => :hidden})