我是铁杆新手。我在lib目录中有一个设置,如:
lib/
blog/
core/
search/
base.rb
base.rb也定义了Base类:
module Blog
module Core
module Search
class Base
attr_accessor :properties
def initialize(params)
@properties = {}
end
end
end
end
end
我的application.rb
中有以下代码config.autoload_paths += Dir["#{config.root}/lib/**/"]
当我将其包含在帖子控制器中时,我会收到以下错误:
LoadError in PostsController#index
Expected /home/usr/code/blog/lib/blog/core/search/base.rb to define Base
有什么想法吗?我正在使用rails 3.2.5和RVM。谢谢你的一切建议。
更新:添加了我的完整堆栈:
Started GET "/admin/posts" for 127.0.0.1 at 2012-06-08 21:06:18 +0800
LoadError (Expected /home/usr/code/blog/lib/blog/core/search/base.rb to define Base):
app/controllers/admin/base_controller.rb:5:in `<top (required)>'
app/controllers/admin/posts_controller.rb:6:in `<top (required)>'
Rendered /home/usr/.rvm/gems/ruby-1.9.3-p194@rails-3.2.5/gems/actionpack-3.2.5/lib/action_dispatch/middleware/templates/rescues/_trace.erb (1.9ms)
Rendered /home/usr/.rvm/gems/ruby-1.9.3-p194@rails-3.2.5/gems/actionpack-3.2.5/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (0.6ms)
Rendered /home/usr/.rvm/gems/ruby-1.9.3-p194@rails-3.2.5/gems/actionpack-3.2.5/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (7.0ms)
答案 0 :(得分:39)
我遇到了同样的问题。它来自于您尝试使用/lib/**/
我遇到错误:
Expected /[...]/myapp/lib/durative/base.rb to define Base (LoadError)
目录结构:
lib/
--durative/
--base.rb
<强> base.rb:强>
module Durative
class Base
def initialize(config)
@config = {}
end
#...
end
end
<强> application.rb中:强>
config.autoload_paths += Dir["#{config.root}/lib/**/"]
目录结构:
lib/
--durative.rb **(added)**
--durative/
--base.rb
<强> durative.rb:强>
require 'durative/base'
base.rb (无变化)
application.rb(已更改):
config.autoload_paths += Dir["#{config.root}/lib/"]
告诉我们它是否适合您。
答案 1 :(得分:7)
我有同样的问题。问题是因为我包括子目录而不包括他们的父lib目录:
# did not work
config.autoload_paths += %W(#{config.root}/lib/foo)
和
# in lib/foo/my_class.rb
module Foo
class MyClass
end
end
Foo :: MyClass将返回Expected以定义MyClass
将lib目录添加到config.autoload_paths可修复问题
# worked
config.autoload_paths += %W(#{config.root}/lib #{config.root}/lib/foo)
答案 2 :(得分:3)
添加:
require base.rb
在您的environment.rb文件中。
源: http://icebergist.com/posts/expected-xrb-to-define-x-loaderror
答案 3 :(得分:1)
另外,要检查的一件事是你的控制器是否正确命名。
例如,确保你的posts_controller.rb在第一行看起来像这样
class PostsController < ApplicationController
我在复制控制器并将其跟踪到不更改控制器类名称
时出错答案 4 :(得分:0)
如果您有深度隐藏的课程,请以这种方式访问:
Blog::Core::Search::Base.new 'foo'
答案 5 :(得分:0)
我的错误是我有
app/
controllers/
projects/
some_controller.rb
projects_controller.rb
我试图保持我的应用程序井井有条,当有一个命名空间时 - 正在拆分控制器。不幸的是,看起来Rails会在两者之间随机跳转,并且会出现导致OP错误的冲突。
解决方案: 重命名子目录并调整任何路径。