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

module not loading in the controller (undefined_method error)

在我看来应用 BeforeOrAfter 模块之前,尝试让它在控制台中工作。获取 NoMethodError: undefined methodbefore_or_after' for #` 错误:

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

我选择创建一个新的模块子目录,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

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

如果您是 运行 完整的 Rails 应用程序,那么您的文件应该会自动加载。您可以阅读更多关于自动加载和需要 here.

的内容

要 运行 在您的 rails 应用程序中,请在 config/application.rb,

中添加以下行
config.autoload_paths << Rails.root.join('app/modules')

为了 运行 在控制台中,首先包含您的模块,例如,

include BeforeOrAfter