使用Rails过滤模型上的所有搜索

时间:2019-03-07 13:43:07

标签: ruby-on-rails ruby

我正在使用Ruby on Rails在运行的应用程序上通过重构处理情况。

在该应用上,我有一个可以将其个人资料设为有效/无效的用户。

在用户上,我也有他的生日。对于所有13岁以下的用户,帐户都需要具有“无效”之类的行为。

我刚刚向用户模型添加了一个is_active布尔属性。

问题是:我不想重构我对应用程序上的用户的所有查询,添加

User.where(is_active: true).where(age > 13)  

亲手操作所有型号

我想使用其他技术,例如User模型或控制器中的回调函数。

你觉得什么?

1 个答案:

答案 0 :(得分:1)

default_scope是您想要的,如果您不想更改已编写的查询但想添加默认条件

class User < ActiveRecord::Base
  default_scope { where(is_active: true).where("age > 13") }
end

注意:不建议使用default_scope,因此请您做相应的研究

解决方案2:

您将必须在用户表上所有要查询的地方添加一次范围

class User < ActiveRecord::Base
  scope :active, -> { where(is_active: true).where("age > 13") }
end

并使用它

User.active.where(...)

您可能需要在加入模型时处理以上条件