【发布时间】:2014-11-13 14:37:01
【问题描述】:
我正在尝试在 Rails 中构建一个联系表单,而不将邮件存储在我的数据库中。但是我在发送表单时收到了undefined method 'name' for nil:NilClass 错误。
我的消息控制器
def create
@message = Message.new(message_params)
if @message.valid?
# TODO send message here
Messages.new_messages_email(@mailer).deliver
redirect_to root_url, notice: "Message sent! Thank you for contacting us."
else
redirect_to root_url, notice: "Something went wrong, try again!"
end
end
private
def message_params
params.require(:message).permit(
:name,
:message,
:email
)
end
我的消息模型
class Message
include ActiveModel::Validations
include ActiveModel::Conversion
extend ActiveModel::Naming
attr_accessor :name, :email, :message
validates_presence_of :name
validates :email, :email_format => {:message => 'is not looking good'}
validates_length_of :message, :maximum => 500
def initialize(attributes = {})
attributes.each do |name, value|
send("#{name}=", value)
end
end
def persisted?
false
end
end
电子邮件正文
!!!
%html
%body
%p
= @mailer.name
Schreef het volgende:
%p= @mailer.message
%p= @mailer.email
在我的路线中,我有
resources :messages
我忘记发布我的消息邮件
class Messages < ActionMailer::Base
default from: "info@domein.nl"
def new_messages_email(mailer)
@mailer = mailer
mail(to: 'peter@no-illusions.nl',
subject: 'Iemand wilt contact met U')
end
end
为了完成我的表格,
= form_for @message do |f|
.field
%br/
= f.text_field :name, :placeholder => "Naam"
.field
%br/
= f.text_field :email, :placeholder => "Emailadres"
.field
%br/
= f.text_area :message, :rows => 5, :placeholder => "Uw bericht"
.actions= f.submit "Verstuur bericht", :id => "submit"
在我的 MessagesController 中,我为 create 函数定义了参数,但是我做错了什么,忘记或忽略了导致错误的原因。
【问题讨论】:
-
`Messages.new_messages_email(@mailer).deliver` 在这一行你使用
@mailer,你的意思是@message,你还没有定义@mailer,除非它在别处跨度> -
你确定你的视图中有
form_for @message吗?
标签: ruby-on-rails contact-form