【问题标题】:How to extract common named_scopes from ActiveRecord models如何从 ActiveRecord 模型中提取常见的 named_scopes
【发布时间】:2010-09-16 06:04:58
【问题描述】:

我已经在多个 ActiveRecord 模型中重用了 named_scope。 例如:

  named_scope :limit, lambda {|limit| {:limit => limit}}    

提取此代码以在模型之间共享的最佳做法是什么。 是否可以将其提取到模块中,还是应该重新打开 ActiveRecord::Base 类?

【问题讨论】:

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


    【解决方案1】:

    使用模块。这样的事情应该可以工作:

    module CommonScopes
      def self.included(base)
        base.class_eval do
          named_scope :limit, lambda {|limit| {:limit => limit}}
        end
      end
    end
    

    然后只需包含 CommonScopes 就可以了。

    【讨论】:

    • 这似乎适用于类级别,但不适用于实例级别。例如:User.limit(1) 有效,但此处第二次调用限制会引发错误:users=User.limit(5); users.limit(1)。实例级别的任何解决方案?
    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-13
      • 1970-01-01
      相关资源
      最近更新 更多