组织lib目录中的文件

时间:2012-06-30 15:08:42

标签: ruby-on-rails

我正在尝试将我的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

当我将所有这些都放在一个文件中时,一切都很完美。那我怎么能正确地链接这些文件呢?

2 个答案:

答案 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.rb
require "eventable/helpers"
require "eventable/calendar"