我正在尝试创建我的第一个 Rails 插件,但在使用 ActionMailer 时遇到了一些麻烦。该插件仅收集用户反馈并将其从给定地址通过电子邮件发送,因此就功能而言,它并不太复杂......
在我决定将这些东西插件化之前,所有功能都在我的原始应用程序中完美运行。我一直在尽可能多地遵循 railsguide 创建插件,您可以在此处找到我的整个插件的源代码:
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-调用deliver_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):
提前感谢您的帮助!(请随时批评我的插件结构,这是我的第一次尝试,所以我确信我做错了各种各样的事情......)