Rails - 创建全局命名范围?

时间:2014-09-08 02:24:51

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

我的模型A,B和C需要相同的范围。

我发现这个question提到了创建模块并包含它:

require 'active_support/concern'

module Scopes
  extend ActiveSupport::Concern

  included do
    scope :disabled, where(:disabled => true)
  end

  module ClassMethods
   ...
  end
end

但是它没有解释放在哪里以及如何包括。

我尝试将上面的代码放在config/my_scopes.rb中,并将其包含在我的application_controller.rb中,如下所示:

class ApplicationController < ActionController::Base
  include Scopes
  ...
end

我有路由错误这样说:

uninitialized constant ApplicationController::Scopes

我对Rails很新,所以我不确定是什么导致它。有什么帮助吗?

由于

1 个答案:

答案 0 :(得分:3)

您应该在Rails 3中要求require 'concerns/scopes.rb'这样的文件。

此外,您的范围是ActiveRecord,并且您将其包含在控制器中,我认为这不起作用。你应该这样做:

module ActiveRecord
  module Base
    include Scopes
  end
end

我不确定你应该把这个文件放在哪里(并且它是否有效:))。

或者也许:

class ActiveRecord
  include Scopes
end

并在ApplicationController中需要此文件