2

我正在尝试为要共享的模型创建一些通用范围,所以我创建了这个:

lib
|_ scopes
   |_ scope.rb
   |_ bars.rb

# lib/scopes/scope.rb
module Scope
end

# lib/scopes/bars.rb
module Scope
  module Bars
    def self.included(base)
      base.class_eval{
        scope :somescope, lambda{ where(:foo => :bar) }
      }
    end
  end
end

现在当我把它放在一个模型中时:

include Scope::Bars

它抛出一个错误:Expected c:/sites/app_name/lib/scopes/bars.rb to define Bars

出于某种奇怪的原因,当我只使用 rails 控制台而不是 WEBrick 服务器进行测试时,不会发生这种情况。

如果我不使用子模型,它也可以完美地工作,比如:include Bars会工作得很好。

有任何想法吗?

4

1 回答 1

5

以下结构

lib
|_ scopes
   |_ scope.rb
   |_ bars.rb

期望您将顶级模块定义为Scopes,而不是Scope。将文件夹重命名scopesscope或将模块更改为

# lib/scopes/bars.rb
module Scopes
  module Bars
    def self.included(base)
      base.class_eval do
        scope :somescope, lambda { where(:foo => :bar) }
      end
    end
  end
end
于 2012-06-29T13:53:27.750 回答