0

我从名为 Plac 的模型中引用自定义类

模型在 models/plac.rb 中定义如下:

class Model < ActiveRecord::Base

  def notify_owner

    notifier = BatchNotify.getInstance
  end


end

BatchNotify 在 lib/modules/batch_notify.rb 中定义,如下所示:

class BatchNotify

  def self.getInstance
    env = Rails.env
    if(env == "test")
      return TestBatchNotify.new
    else

      BatchNotify.new
    end
  end
end

我还将模块目录添加到 autoload_path:

config.autoload_paths += %W(#{config.root}/lib/modules)

奇怪的是,当 notify_owner() 在 rails 控制台上运行良好时。

但是,当我使用 rails server 启动 Web 服务器并尝试通过在浏览器中使用该应用程序来触发 notify_owner 时,我收到以下错误:

未初始化的常量 Plac::BatchNotify

首先,为什么控制台与 Web 服务器的行为不同?

其次,为什么它仍然无法识别 Batch notify 常量?

顺便说一句,我还尝试在模块中定义 BatchNotify 并将其引用为 Module::BatchNotify 但没有运气......

4

1 回答 1

0

有几种方法可以正确加载 BatchNotify 类。

使用以下代码添加 config/initializers/00_requires.rb 文件:

require "#{Rails.root}/lib/modules/batch_notify.rb"

或者,在类中需要 models/placebo.rb Model

require "#{Rails.root}/lib/modules/batch_notify.rb"

关于此代码的其他一些评论:

  1. Rails 已经使用了模型这个术语,所以Model在 Rails 中这不是一个好的类名。
  2. 文件命名约定是文件名应与模型名相对应。因此,models/placebo.rb 应该重命名为 models/model.rb 以遵循约定。
  3. BatchNotify 是一个类,所以我认为你不应该把它放在一个目录名称模块中。
于 2013-08-03T18:04:56.670 回答