我正在尝试将我的Rails项目的一部分提取到我的lib目录中,但我无法弄清楚如何正确链接我的文件。我的目录结构如下所示:
lib/
eventable/
calendar.rb
helpers.rb
# Rest of rails directories/files
我要求config/application.rb
中的可事件目录:
config.autoload_paths += %W(#{config.root}/lib #{config.root}/lib/eventable)
我的助手和日历rb文件:
# helpers.rb
module Eventable
module Helpers
def calendar_for...
Calendar.new...
end
end
end
# calendar.rb
module Eventable
class Calendar
# methods defined here
end
end
然后我将我的Eventable :: Helpers模块混合在常规的Rails助手中,以便我可以在我的视图中使用calendar_for
:
ActionView::Base.send :include, Eventable::Helpers
这最后一步似乎工作正常。但是,当我转到使用这个助手的视图时,我得到了:
uninitialized constant Eventable::Helpers::Calendar
如果我更改了我的帮助程序,以便它尝试访问Eventable::Calendar.new
,那么我得到:
uninitialized constant Eventable::Calendar
当我将所有这些都放在一个文件中时,一切都很完美。那我怎么能正确地链接这些文件呢?
答案 0 :(得分:3)
看起来你需要一个加载器类型的文件告诉Rails在哪里找到Eventable
模块的代码。
尝试添加lib/eventable.rb
:
module Eventable
autoload :Calendar, 'eventable/calendar'
autoload :Helpers, 'eventable/helpers'
end
如果您有加载文件,则不需要更改加载路径。
答案 1 :(得分:1)
我有类似的问题。我通过改变模块的使用方式解决了这个问题。
在 application.rb
中config.autoload_paths += Dir["#{config.root}/lib/"]
使用以下代码
创建 /ll/eventable.rbrequire "eventable/helpers"
require "eventable/calendar"