重新定义:全部

时间:2010-10-17 21:18:37

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

我的系统中的用户可以选择“休眠”,此时他们可以完全从系统中删除自己及其所有相关记录。我在我的网站上有查询在User表及其相关表中搜索(由多达5个中间表分隔),并且没有明确测试用户是否正在休眠。

有没有办法只将用户设置重新定义为非休眠用户,这样我所有当前的查询都可以正常运行而无需单独更改?

我怎样才能最优雅地完成我想要做的事情?

1 个答案:

答案 0 :(得分:6)

这通常使用默认范围完成。阅读all about them

Ryan网站的代码:

class User < ActiveRecord::Base
  default_scope :hibernate => false
end

# get all non-hibernating users
@users = User.all

# get all users, not just non-hibernating (break out of default scope)
@users = User.with_exclusive_scope { find(:all) }  #=> "SELECT * FROM `users`