2016-01-31 3 views
0

Во-первых, у меня есть класс, который в приложение/workes/ так:Невозможно вызвать метод другого класса из статического метода

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

И как контроллер, у меня есть класс UsersController и статический метод, как ниже:

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

Когда я вызов метод UsersController.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 и попытаться добавить

require './SendMailTask'

в начале файла пользователей _controller.rb но он не работает.

Пожалуйста, помогите мне устранить эту ошибку. Спасибо

ответ

1

NameError означает, что ваш SendMailTask не загружен. поэтому вам придется загрузить это. так что пара вещей.

  1. Я заметил опечатку workes, поэтому, пожалуйста, проверьте имя файла правильно. По Конвенции она должна быть расположена по адресу app/workers/send_mail_task.rb. так что любезно в два тройки проверить то же самое.

  2. О require './SendMailTask', это неправильно. Вместо этого это будет send_mail_task, так как требует работы с именами файлов &, а не имена классов.

  3. если все еще получаю сообщение об ошибке, то, пожалуйста, напишите Ваше $LOAD_PATH, чтобы увидеть вас требует файл относительно заданной $LOAD_PATH

  4. Вместо require, я предпочитаю использовать require_dependency, как он работает с кодом перегрузки и т.д. поэтому, если у вас возникли проблемы с автоматической загрузкой, просто прикрепите эту require_dependency к вершине файла, это будет подсказывать рельсы для загрузки файла перед запуском контроллера.

+0

Благодарю вас. Когда я добавляю «require» sendmail_task «», он может нормально работать – Viet

Смежные вопросы