我正在尝试为模型分享一些共同的范围,所以我创建了这个:
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
可以正常工作。
有什么想法吗?
答案 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