我目前正在使用Rails 3并处理联系表单。我的数据正在发送,我可以从params
哈希访问它,但当我尝试将它发送到我的ActionMailer类以便在电子邮件中使用时,我会被抛出奇怪的错误。
目前正在抛出此错误。
undefined method `TestName' for #<MessageMailer:0x00000003f43af0>
并说错误在这些行上
app/mailers/message_mailer.rb:8:in `message'
app/controllers/contact_controller.rb:20:in `message'
奇怪的是,'TestName'
是我在:name
输入的联系表单中输入的值。
这是来自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@domain.com", :to => "email@domain.com", :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@domain.com')
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
任何帮助都会很棒!
更新好的,我解决了原始错误,但现在它在wrong number of arguments (0 for 1)
上抛出此错误MessageMailer.message(@data).deliver
。我尝试将@data
更改为params
以绕过@data
变量的任何问题,但它仍在提供。
答案 0 :(得分:1)
validates_presence_of(以及其他验证方法)旨在成为采用属性名称进行测试的类方法。所以你使用它们的方式(在方法中是不正确的)导致它评估为
validates_presence_of TestName
这确实导致它检查
self.TestName
这就是为什么你得到未定义的方法错误。
修复它的方法......
HTH
答案 1 :(得分:0)
请关注http://railscasts.com/episodes/206-action-mailer-in-rails-3和 http://guides.rubyonrails.org/action_mailer_basics.html。
你可能在POST数据中犯了错误MessageMailer.message(@data)
可能是类名&amp;功能名称问题。
或者可能是由于您需要在邮件配置设置后重新启动服务器。
让我知道它是否没有解决?