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

これらすべてを 1 つのファイルにまとめたところ、すべてが完全に機能しました。では、これらのファイルを正しくリンクするにはどうすればよいでしょうか?

4

2 に答える 2

3

EventableRails にモジュールのコードの場所を伝えるには、ローダー タイプのファイルが必要なようです。

を追加してみてくださいlib/eventable.rb

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

ローダー ファイルが配置されている場合は、ロード パスを変更する必要はありません。

于 2012-06-30T15:17:12.787 に答える
1

私も同様の問題を抱えていました。モジュールの必要性を変えることで解決しました。

application.rb

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

次のコードで/lib/eventable.rbを作成します

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