2010-08-16 2 views
0

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

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

http://github.com/gshankar/rocket_feedback

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

1- файл, который загружает все в: rocket_feedback/Библиотека/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- контроллер, который вызывает метод deliver_feedback rocket_feedback/Библиотека/приложение/контроллеры/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 = '[email protected]' 
    @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

какая у вас рельсы версия? Я не уверен, почему, но иногда меняя Actionmailer :: Base на ActionMailer :: ARMailer работает – corroded

+0

Я на 2.3.8, я проверю это благодаря подсказке! –

ответ

1

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

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

Спасибо Swanand, используя ваш совет (и переименование нескольких вещей, а также, у меня было слишком много вещей, называемых RocketFeedback на всем моем плагине), я смог получить все, что работает. Ура! –