Param丢失或值为空:contact

时间:2014-10-10 16:00:59

标签: ruby-on-rails ruby ruby-on-rails-4

我对姓名和电子邮件进行了以下表单验证:

 validates :name,  presence: true
 validates :email, presence: true

在我的浏览器中看起来像:

enter image description here

但是,当我提交以下表格时:

 = 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

有人可以解释我在这里做错了吗?

2 个答案:

答案 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