我对姓名和电子邮件进行了以下表单验证:
validates :name, presence: true
validates :email, presence: true
在我的浏览器中看起来像:
但是,当我提交以下表格时:
= simple_form_for @contact, :url => create_enquiry_path, :method => :post do |form|
= form.input :name
= form.input :email
= form.input :phone
= form.input :website
页面上没有错误,但我得到:
param is missing or the value is empty for: contact
我的控制器是:
def create
@contact = ContactForm.new(form_params)
if @contact.errors.any?
render :action => :new
flash[:error] = 'Please correct errors.'
else
redirect_to ....
flash[:notice] = 'Thank you for your message. We will contact you soon!'
end
private
def form_params
params.require(:contact).permit(:name, :phone, :email, :website)
end
有人可以解释我在这里做错了吗?
答案 0 :(得分:3)
您的参数字典的结构似乎与您期望的不同。如果你的params字典来到你的控制器,如:
{ :name => 'John', :email => 'john.smith@abc.ca', ...... }
然后将您的form_params
方法更改为:
def form_params
params.permit(:name, :phone, :email, :website)
end
如果你的params词典来到你的控制器,如:
{ :contact_form => { :name => 'John', :email => 'john.smith@abc.ca', ...... } }
然后将form_params
方法更改为(基于@JiříPospíšil的建议):
def form_params
params.require(:contact_form).permit(:name, :phone, :email, :website)
end
答案 1 :(得分:1)
如果模型的名称为ContactForm
,则form_params
应引用:contact_form
,而不是:contact
。