2014-10-10 246 views
1

我有以下表單驗證的姓名和電子郵件:參數是丟失或爲空值的:接觸

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 

可能有人請解釋什麼,我做錯了什麼?

+0

'require(:contact)',但是在你的表單中沒有任何地方確實有':contact'字段。 – 2014-10-10 16:03:09

+0

您還可以包含_console error_ logs嗎? – 2014-10-10 16:03:14

+0

@MarcB,你建議將'@contact'改爲':contact'? – bootsa 2014-10-10 16:06:32

回答

3

看來您的參數字典的結構與您期望的不同。如果您的PARAMS字典來你的控制器,如:

{ :name => 'John', :email => '[email protected]', ...... } 

然後你form_params方法更改爲:

def form_params 
    params.permit(:name, :phone, :email, :website) 
end 

如果您的PARAMS字典來你的控制器,如:

{ :contact_form => { :name => 'John', :email => '[email protected]', ...... } } 

然後將您的form_params方法更改爲(基於@JiříPospíšil的建議):

def form_params 
    params.require(:contact_form).permit(:name, :phone, :email, :website) 
end 
1

如果模型的名稱是ContactForm,那麼form_params應參考:contact_form而不是:contact

相關問題