无法使嵌套模块工作

时间:2012-06-29 12:30:55

标签: ruby-on-rails

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

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

抛出错误:预期c:/sites/app_name/lib/scopes/bars.rb定义条

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

如果我不使用子模型,它也完美有效,例如:include Bars可以正常工作。

有什么想法吗?

1 个答案:

答案 0 :(得分:5)

以下结构

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

希望您将顶层模块定义为Scopes,而不是Scope。将文件夹从scopes重命名为scope或将模块更改为

# 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