2

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

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

4

2 回答 2

3

看起来你需要一个加载器类型的文件来告诉 Rails 在哪里可以找到Eventable模块的代码。

尝试添加一个lib/eventable.rb

module Eventable
  autoload :Calendar, 'eventable/calendar'
  autoload :Helpers, 'eventable/helpers'
end

如果您有加载程序文件,则不需要更改加载路径。

于 2012-06-30T15:17:12.787 回答
1

我有一个类似的问题。我通过改变需要模块的方式解决了这个问题。

应用程序.rb

config.autoload_paths += Dir["#{config.root}/lib/"]

使用以下代码创建/lib/eventable.rb

require "eventable/helpers"
require "eventable/calendar"
于 2012-06-30T15:59:43.847 回答