2012-06-22 144 views
0

我正在使用Railscast构建Rails 3中的联系表单:http://railscasts.com/episodes/326-activeattr?view=asciicastRails 3 Contact Form,undefined方法?

我知道我唯一做错的事情就是填写消息应该发送的位置。我用下面的代码来发送消息:

mail(:to => "[email protected]") 

然而,这似乎并没有工作,因为每次我提交表单,我得到这个错误:

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 => "[email protected]", :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" 
+0

http://guides.rubyonrails.org/action_mailer_basics.html – vellvisher

+0

你有一个应用程序控制器,而不是行动梅勒 – vellvisher

回答

0

控制器上的邮件变量上没有创建任何对象。对于用户Mailer而言,实际上,您不必实例化一个变量,只需使用该方法调用您的邮件程序即可。像:

YourMailer.send(params) 

您可以随时到轨指导看到一些东西是如何工作的: http://guides.rubyonrails.org/action_mailer_basics.html

0

要创建的Message对象只是一个可以与验证的形式使用的对象。您仍然需要实际创建一个Mailer对象,并使用从@message对象获得的名称/电子邮件/消息填充它。

如果您创建一个邮件程序(见Episode 206 - Action Mailer),而且你在创建后做这样的事情在你的控制器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 
+0

https://github.com/plataformatec/mail_form是真棒 - 以观念一个步骤并结合成一个班级。 –

+0

好的......我遵循了你的建议,并观看了第206集。我添加了上面所做的更改。当我现在提交联系表单时,它会成功重定向到主页,但没有电子邮件发送给我,并且没有通知表明邮件已发送。我错过了什么? – user1429496

+0

在config/environments/development.rb中将其更改为true,以查看是否发生了任何故障:'config.action_mailer.raise_delivery_errors = true' –