0

この Railscast を使用して、Rails 3 で連絡先フォームを作成しています: http://railscasts.com/episodes/326-activeattr?view=asciicast

私が間違っている唯一のことは、メッセージの送信先を記入することです。次のコードを使用してメッセージを送信しました。

mail(:to => "me@myemail.com") 

ただし、フォームを送信するたびに次のエラーが発生するため、これは機能していないようです。

NoMethodError in MessagesController#create

undefined method `mail' for #<MessagesController:0x00000103734bd8>

Application Trace | Framework Trace | Full Trace
app/controllers/messages_controller.rb:10:in `create'

メッセージを送信するには、この行を何に置き換える必要がありますか?

messages_controller.rb

class MessagesController < ApplicationController

  def new
    @message = Message.new
  end

  def create
    @message = Message.new(params[:message])
    if @message.valid?
      UserMailer.contact_message(@message).deliver
      redirect_to root_url, notice: "Message sent! Thank you for contacting us."
    else
      render "new"
    end
  end

end

user_mailer.rb

class UserMailer < ActionMailer::Base

def contact_message(message)
@message = message
mail(:to => "myemail@mymail.com", :subject => "New Message")
end

end

setup_mail.rb

ActionMailer::Base.smtp_settings = {
:address              => "smtp.gmail.com",
:port                 => 587,
:domain               => "mywebsite.com",
:user_name            => "myemail",
:password             => "secret",
:authentication       => "plain",
:enable_starttls_auto => true
}

ActionMailer::Base.default_url_options[:host] = "localhost:3000"
4

3 に答える 3

0

コントローラーのメール変数に作成されたオブジェクトはありません。実際、レール上でメーラーを使用するには、メソッドでメーラーを呼び出すだけで変数をインスタンス化する必要はありません。お気に入り:

YourMailer.send(params)

いつでもレールガイドにアクセスして、いくつかの機能がどのように機能するかを確認できます: http://guides.rubyonrails.org/action_mailer_basics.html

于 2012-06-22T17:52:48.823 に答える
0

作成している Message オブジェクトは、検証のあるフォームで使用できる単なるオブジェクトです。実際に Mailer オブジェクトを作成し、@message オブジェクトから取得した名前/メール/メッセージを入力する必要があります。

メーラーを作成し (エピソード 206 - アクション メーラーを参照)、作成後にコントローラーで次のようなことを行う場合MessageMailer

def create
  if @message.valid?
    MessageMailer.contact_message(@message).deliver
    redirect_to root_url, notice: "Message sent! Thank you for contacting us."
  else
    render "new"
  end
end
于 2012-06-22T17:53:07.237 に答える