0

初めての 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):

助けてくれてありがとう!(そして、私のプラグインの構造を自由に批判してください。これは私の最初の試みなので、あらゆる種類の間違ったことをしたと確信しています...)

4

1 に答える 1

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)
于 2010-08-16T07:12:27.973 に答える