【问题标题】:How to automatically add extra condition to all Models in Rails?如何自动为 Rails 中的所有模型添加额外条件?
【发布时间】:2012-04-05 13:43:53
【问题描述】:

我现在需要向 Rails 添加一些默认的额外规则。

例如。当我打电话时:
个人第一
员工.all
它会自动执行:
Person.first(:conditions => ['age Employee.all(:conditions => ['age

这里的条件 age

【问题讨论】:

  • 这可能会有所帮助:stackoverflow.com/questions/1326743/…
  • 我从中得到了一些帮助,但我也希望在更新和删除时包含默认条件(完全 CRUD)。
  • 更新删除时为什么需要默认条件?
  • 为了获得更好的性能,因为我的表包含数百万条记录并且还在稳步增长。

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


【解决方案1】:

你可以像下面这样使用 default_scope

class Person < ActiveRecord::Base
  default_scope :conditions => ['age < ?', 100]
end

您可能对这篇文章感兴趣。

http://archives.ryandaigle.com/articles/2008/11/18/what-s-new-in-edge-rails-default-scoping

【讨论】:

    【解决方案2】:

    我建议不要对条件使用默认范围,仅用于排序。

    所以我会在每个模型中添加一个命名范围,然后将该范围用于大多数查询,例如

    导轨 3

    scope :confirmed, :conditions => { 'age < ?',100 }
    

    导轨 4

    一些作用域正在变成类方法(无论如何它们基本上都是),所以你可以使用类似的东西:

    def age_limit
      where :age < 100
    end
    

    有关使用范围的更多信息:https://stackoverflow.com/a/5609947/631619

    在多个模型中使用相同的代码有些繁琐,但这是我为不到十几个模型所采用的路线。您也可以创建一个常量 AGE_LIMIT 但系统常量充满了问题。你可能会更好地创建一个模型,也许只是为了年龄,然后为 max_age 建立一个模型,然后参考它。类似的东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-22
      • 1970-01-01
      • 2020-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-21
      • 2015-07-30
      • 2015-09-11
      相关资源
      最近更新 更多