2016-07-29 59 views
2

在我的視圖中應用BeforeOrAfter模塊之前,試圖讓它在控制檯中工作。獲得NoMethodError: undefined method before_or_after」爲#`錯誤:模塊在控制器中未加載(undefined_method錯誤)

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

我選擇創建一個新的模塊子目錄,應用程序/模塊/ before_or_after.rb:在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 

包括它,因爲我的控制器將使用它:

class ApplicationController < ActionController::Base 
    include BeforeOrAfter 

回答

0

要在您的Rails應用程序運行,請添加下面的config/application.rb中線上,

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

要以控制檯運行,首先包括你的模塊一樣,

include BeforeOrAfter 
+0

服務器將無法啓動,因爲配置未定義。這條線是否應該進入某種程度? – sivanes

+0

是的,它必須在類Application

1

我不認爲在運行控制檯之前rails環境是急切加載的。如果您使用該方法,請確保您使用require該文件。

如果您正在運行完整的Rails應用程序,則應該自動加載您的文件。您可以閱讀更多關於自動加載和需求here的需求。

+0

'需要「before_or_after 「'導致LoadError,沒有這樣的文件。我知道我在創建modules /子目錄而不是將模塊粘貼到lib /中的傳統方式,這可能是問題嗎?我正在運行我的開發服務器,重新啓動了很多次。 – sivanes

+0

唯一一次只需按照名稱命名模塊的情況是,如果包含該文件的目錄位於$ LOAD_PATH數組中。您必須使用當前工作目錄中的相對路徑來要求該文件。 – arjabbar

+0

你也應該按照慣例將該文件放在lib目錄下。 – arjabbar