模块未在控制器中加载(undefined_method错误)

时间:2016-07-29 02:09:59

标签: ruby-on-rails mixins

在我的视图中应用BeforeOrAfter模块之前,尝试让它在控制台中运行。为#`错误获取NoMethodError: undefined method before_or_after':

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

我选择创建一个新的modules子目录app / modules / before_or_after.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

将它包含在application_controller.rb中,因为我的所有控制器都将使用它:

class ApplicationController < ActionController::Base
  include BeforeOrAfter

2 个答案:

答案 0 :(得分:1)

在运行控制台之前,我认为不会加载rails环境。如果您在控制台中,请确保在使用该方法之前require该文件。

如果您正在运行完整的Rails应用程序,那么您的文件应该是自动加载的。您可以阅读有关自动加载和需求here的更多信息。

答案 1 :(得分:0)

要在rails应用中运行,请在config / application.rb中添加以下行,

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

要在控制台中运行,请首先包含您的模块,

include BeforeOrAfter