2012-02-24 5 views
0

私は現在、Rails 3を使用しており、連絡先フォームで作業しています。私のデータは送信されており、paramsハッシュからアクセスできますが、電子メールで使用するActionMailerクラスに送信しようとすると奇妙なエラーが発生しています。ActionMailerを使用して投稿データからメールを送信する際の問題

現在、このエラーが発生しています。

undefined method `TestName' for #<MessageMailer:0x00000003f43af0> 

とエラーが奇妙なことが'TestName'は、私は:name入力用のコンタクトフォームに入力した値であることであるこれらのラインに

app/mailers/message_mailer.rb:8:in `message' 
app/controllers/contact_controller.rb:20:in `message' 

であると言います。ここで

がmessage_mailer.rbとcontact_controller.rb

から自分のコードMessageMailer

class MessageMailer < ActionMailer::Base 

    include ActiveModel::Validations 

    def message(data) 

    @data = data 
    validates_presence_of @data[:name] 
    validates_presence_of @data[:email] 
    validates_presence_of @data[:website] 
    validates_presence_of @data[:message] 

    mail(:from => "[email protected]", :to => "[email protected]", :subject => "New Message From #{data.name}") 

    end 
end 

あるContactController

class ContactController < ApplicationController 

    def message 
    if request.post? 
     @data = { 
     :name => params[:name], 
     :email => params[:email], 
     :website => params[:website], 
     :message => params[:message] 
     } 

     if MessageMailer.message(@data).deliver 
     redirect('/contact', :flash => 'Thank you for the message. I will get back to you as soon as possible') 
     else 
     redirect('/contact', :flash => 'Oops! Something went wrong. I will look into it. Until it\'s fixed you can email me at [email protected]') 
     end 

    else 
     redirect('/contact', :flash => 'Please fill out the contact form to get in touch.') 
    end 

    end 

end 

エラーがmessage_mailer.rbにラインvalidates_presence_of @data[:name]上にあると言っていますcontact_controller.rbのif MessageMailer.message(@data).deliver

どのような助けが素晴らしいだろう!

UPDATE:さてさて、私は元のエラーを解決したが、今ではMessageMailer.message(@data).deliverにこのエラーwrong number of arguments (0 for 1)を投げています。 @dataparamsに変更して、@data変数の問題を回避しようとしましたが、まだそれを与えています。

答えて

0

http://railscasts.com/episodes/206-action-mailer-in-rails-3http://guides.rubyonrails.org/action_mailer_basics.htmlに従ってください。

POSTデータで間違っている可能性があります。MessageMailer.message(@data)は、クラス名&の機能名に問題があります。 メール設定のセットアップ後にサーバーを再起動する必要がある可能性があります。

解決できない場合は教えてください。

+0

@Architは、以下の方法でエラーを考え出したが、私はまだ、このエラーに引数の '間違った数(1 0)'取得しています。私はサーバを再起動し、 '@ data'を' params'で置き換えましたが、それでもそのエラーを投げています。なぜ私はそれにかなり明確に引数を与えているのかわからない。 – Mike

+0

@paramsは、 '間違った引数数(1の場合は0)'を表示するとnilを返します。デバッガを使ってチェックします。 –

+0

'@params'を使用していません。私が知っている' params'を使っています。投稿データと一緒に – Mike

1

validates_presence_of(およびその他の検証メソッド)は、テストするプロパティ名をとるクラスメソッドとして設計されています。だから、あなたは(メソッドの内部で間違っていた)、それらを使用している方法は、それは本当にあなたが未定義のメソッドのエラーを取得する理由である

self.TestName 

をチェックすることになり

​​

に評価する原因となります。

それを修正する方法...

  1. メーラーでそのような検証を使用しないでください。単に空文字列#を使ってそれらの文字列の空をチェックするだけですか?
  2. @データ値が割り当てられる別のオブジェクトを作成します。validates_presence_of宣言(ActiveRecordのようなクラスの)を使用し、#validate!を使用してテストしてください!

HTH

+0

Okすべての検証を削除しました。この行に 'wrong number of arguments(0 for 1)'というエラーがスローされました。もし明確に引数を与えている場合はMessageMailer.message(params).deliver'を入力してください。 – Mike

+0

Mike can変更されたコードをhttps://gist.github.com/に貼り付け、リンクを提供しますか?あなたが全体として持っているものを再検討するのに役立ちます。 –

関連する問題