Использование ActionMailer в плагине Rails - PullRequest
0 голосов
/ 16 августа 2010

Я пытаюсь создать свой первый плагин Rails, и у меня возникают проблемы с использованием ActionMailer.Плагин просто собирает отзывы пользователей и отправляет их по электронной почте с заданного адреса, так что с точки зрения функциональности это не слишком сложно ...

Вся функциональность отлично работала в моем исходном приложении, пока я не решил подключить этот материал.Я следил за руководством по созданию плагина в максимально возможной степени, и вы можете найти источник всего моего плагина здесь:

http://github.com/gshankar/rocket_feedback

Хотя я почти уверен, что проблема водин из этих файлов:

1- Файл, который загружает все в: rocket_feedback / lib / rocket_feedback.rb

require 'rocket_feedback/routing'
require 'action_mailer'

%w{ models controllers }.each do |dir|
  path = File.join(File.dirname(__FILE__), 'app', dir)
  $LOAD_PATH << path
  ActiveSupport::Dependencies.load_paths << path
  ActiveSupport::Dependencies.load_once_paths.delete(path)
end

2- Контроллер, который вызывает метод delivery_feedback rocket_feedback / lib / app/controllers/rocket_feedback_controller.rb

class RocketFeedbackController < ApplicationController

  #Email method for feedback
  def send_feedback
      subject = params["subject"]
      from = params["email"]
      feedback = params["feedback"]
      RocketFeedback::deliver_feedback(from, subject, feedback)
      respond_to do |format|
        format.js { render :text => ''}
      end
   end
end

3- Модель (которая унаследована от ActionMailer)

class RocketFeedback < ActionMailer::Base

  default_url_options[:host] = HOST

  def feedback(from, subject, feedback)
    @subject = "Feedback: #{subject}"
    @subject_for_message = subject
    @recipients = 'yourname@yourdomain.com' 
    @from = from
    @sent_on = Time.now
    @sent_at = Time.now.strftime("%d/%m/%Y, %I:%M:%S %p").to_s
    @body["sent_at"] = @sent_at
    @body["from"] = from
    @body["feedback"] = feedback
    @body["subject"] = @subject_for_message
    @headers = {}
  end

end

Единственное, что у меня есть, это сообщение об ошибке, когда я пытаюсь отправить отзыв черезПлагин:

NoMethodError (undefined method `deliver_feedback' for RocketFeedback:Module):

Заранее спасибо за помощь!(И, пожалуйста, не стесняйтесь критиковать структуру моего плагина, это моя первая попытка, так что я уверен, что я все сделал неправильно ...)

1 Ответ

1 голос
/ 16 августа 2010

В вашем плагине есть класс RocketFeedback и модуль RocketFeedback. Динамический метод ActionMailer#deliver_foo определяется через ваш класс. Вы должны вызывать методы класса, используя оператор dot.

# Instead of this
RocketFeedback::deliver_feedback(from, subject, feedback)
# This should work
RocketFeedback.deliver_feedback(from, subject, feedback)
...