无法从静态方法

时间:2016-01-31 19:43:10

标签: ruby-on-rails

首先,我有一个类 app / workes / 这样的课程:

class SendMailTask
  include Resque::Plugins::Status
  require 'mail'
  def perform
    ...
  end

作为一个控制器,我有类UsersController和静态方法,如bellow:

class UsersController < ApplicationController
  def self.check
    ...
    ::SendMailTask.create(to: [] << @to_addresses,  subject: @subject, body: @body)
  end

当我从其他文件调用方法UsersController.check()时,我收到错误:“in block in check':未初始化的常量SendMailTask​​(NameError)”

但是从其他控制器,我可以正常调用SendMailTask​​:

class ErrorController < ApplicationController
  def index
    ...
    ::SendMailTask.create(to: [] << @to_addresses,  subject: @subject, body: @body)
  end

我尝试添加此行:

config.autoload_paths += %W(#{config.root}/app/workers)

application.rb 并尝试添加

  

要求'./SendMailTask​​'

在文件 users_controller.rb 的开头,但它不起作用。

请帮我解决此错误。谢谢你

1 个答案:

答案 0 :(得分:1)

NameError表示未加载SendMailTask。所以你必须加载它。所以有几件事情。

  1. 我注意到了一个拼写错误workes,所以请验证文件名是否正确。根据公约,它应位于app/workers/send_mail_task.rb。如此亲切的双重检查相同。

  2. 关于require './SendMailTask',这是错误的。相反,send_mail_task根据需要对文件名&amp;不是班级名称。

  3. 如果仍然出现错误,请发布您的$LOAD_PATH以确定您需要相对于定义的$LOAD_PATH

  4. 的文件
  5. 我更喜欢使用require代替require_dependency,因为它适用于代码重新加载等。所以如果您在自动加载时遇到问题,只需将require_dependency放在文件,这将提示rails在运行控制器之前加载文件。