【发布时间】:2012-02-16 22:25:36
【问题描述】:
我在为模型中包含的模块命名时遇到了一些麻烦。
在 /app/models/car.rb 中
class Car
include Search::Car
end
在 /lib/search/car.rb 中
module Search
module Car
include ActiveSupport::Concern
# methods in here
end
end
在 /config/application.rb 中
config.autoload_paths += Dir["#{config.root}/lib/**/"]
config.autoload_paths += Dir["#{config.root}/lib/search/*"]
奇怪的是,当我启动服务器时,我没有直接收到任何错误。 但是,如果我在一段时间后刷新浏览器,我会收到此错误:
Expected #{Rails.root}/lib/search/car.rb to define Car
问题的性质表明它与以下方面有关:
/config/environments/development.rb
config.cache_classes = false
我还尝试将文件search.rb 直接放在我定义Search 的/lib 中:
module Search
# Put shared methods here
end
我做错了什么?
更新:
好的,事实证明,如果我将 Search::Car 重命名为 Search::CarSearch 它可以工作。
不能在不同的范围内拥有同名的模块/类吗?
【问题讨论】:
-
您可以在不同的范围内拥有同名的模块/类,但是当您使用模块 Car 方法时,您应该指定范围,以消除歧义。
-
您好,感谢您的评论。我也是这么想的,但是好像不行。知道为什么我会收到错误吗?
标签: ruby-on-rails ruby