2016-07-29 39 views
2

モジュールを適用する前に、BeforeOrAfterモジュールをコンソールにインストールしようとしました。なぜなら、すべての私のapplication_controller.rbでそれを含めモジュールがコントローラにロードされていません(未定義エラー)

module BeforeOrAfter 
    attr_reader :past 
    attr_reader :future 

    require "date" 
    def initialize 
    @datetime = DateTime.new 
    @future = [] 
    @past = [] 
    end 

    def before_or_after(datetime) 
    if datetime < DateTime.now 
     @past << datetime 
    else 
     @future << datetime 
    end 
    end 
end 

:# `エラーのNoMethodError: undefined method BEFORE_OR_AFTER」取得:

> s = Artist.find(1) 
> s.events.each do |event| 
>  before_or_after(event.date) 
> end 

を私は新しいモジュールのサブディレクトリ、アプリ/モジュール/ before_or_after.rbを作成することにしましたコントローラーはそれを使用しています:

class ApplicationController < ActionController::Base 
    include BeforeOrAfter 

答えて

0

あなたのレールのアプリで実行するには、config/application.rb内の行の下に追加してください、

config.autoload_paths << Rails.root.join('app/modules') 

コンソールで実行するには、

include BeforeOrAfter 
+0

サーバーは起動しません。その行はある種のブロックに入るはずですか? – sivanes

+0

はい、アプリケーション

1

コンソールを実行する前にレール環境が熱心にロードされているとは思われません。コンソールにいる場合は、その方法を使用する前にそのファイルrequireを確認してください。

完全なRailsアプリケーションを実行している場合は、ファイルを自動読み込みする必要があります。自動ローディングについて詳しくは、hereが必要です。

+0

'「BEFORE_OR_AFTERを必要とする、などの最初のあなたのモジュールを含みます"はLoadErrorにつながり、そのようなファイルはありません。 lib /にモジュールを貼り付けるのではなく、モジュール/サブディレクトリを作成することでそれほど慣習的ではないことを知っています。私は自分のdevサーバを走らせて、何度も再起動します。 – sivanes

+0

ファイルを含むディレクトリが$ LOAD_PATH配列にある場合にのみ、モジュールを名前のように要求することができます。現在の作業ディレクトリからの相対パスを使用してファイルを要求する必要があります。 – arjabbar

+0

また、libディレクトリの下にそのファイルを置くことで規約に従うべきです。 configが未定義のため、 – arjabbar

関連する問題