我正在使用此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"
答案 0 :(得分:0)
控制器上的邮件变量上没有创建对象。实际上,对于用户Mailer on rails,您不必实例化变量,只需使用该方法调用邮件程序即可。喜欢:
YourMailer.send(params)
您可以随时访问导轨指南以查看某些内容的工作原理: http://guides.rubyonrails.org/action_mailer_basics.html
答案 1 :(得分: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
答案 2 :(得分:0)
我刚才在这里回答了类似的问题:https://stackoverflow.com/a/17883328/307308
您的邮件方法中缺少from
属性。
mail(:from => 'system@mymail.com', :to => "myemail@mymail.com", :subject => "New Message")