代码之家  ›  专栏  ›  技术社区  ›  sscirrus

重新定义:所有

  •  4
  • sscirrus  · 技术社区  · 14 年前

    我的系统中有用户可以选择“休眠”,此时他们可以完全从系统中删除自己和所有相关记录。我的站点上到处都有搜索用户表及其关联表(由多达5个中间表分隔)的查询,没有一个查询明确测试用户是否处于休眠状态。

    有没有一种方法可以将用户集重新定义为仅限非休眠用户,这样我当前的所有查询都将在不单独更改的情况下工作?

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

    1 回复  |  直到 14 年前
        1
  •  6
  •   Jesse Wolgamott    14 年前

    这通常是用默认范围完成的。读 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`
    
    推荐文章