2016-04-14 53 views
-1

我遇到了这个问题,使用rails中的表单处理,并想知道是否有人可以快速查看它。Param缺失或值为空:在新的

我的观点看起来像

= form_for @form_submission do |f| 
- if @form_submission.errors.any? 
    #error_explanation 
    %h2= "#{pluralize(@form_submission.errors.count, "error")} prohibited this form_submission from being saved:" 
    %ul 
     - @form_submission.errors.full_messages.each do |msg| 
     %li= msg 

..和我的控制器是像这样

class FormSubmissionsController < ApplicationController 
    invisible_captcha only: [:create], on_spam: :handle_spam 

def new 
@form_submission = FormSubmission.new(form_submission_params) 

if @form_submission.save 
    redirect_to thank_you_path 
else 
    redirect_to root_path 
end 
end 

private 

def handle_spam 
    redirect_to root_path 
end 

def form_submission_params 
    params.require(:form_submission).permit(:first_name, :last_name, :organization, :email, :phone) 
end 
end 

最终我的问题是,我不知道是什么PARAMS我失踪。或者即使我的价值是空的,我怎么知道,我能做些什么来解决这个问题?

+0

您的“新”动作应该在这里做什么? 'new'主要用于实例化一个对象,接着是一个'create'动作,它应该接受你强壮的参数中的白名单参数来创建一个对象。 – dp7

+0

您只需渲染新表单并使用创建操作即可保存您的数据。还可以使用'pry' gem来替换应用程序 – user2322409

回答

2

标准的钢轨方法表单是你的新动作是一个'GET',用于显示创建资源的新视图。表单字段添加到params散列的表单'POST'到创建操作。你的控制器方法应该是

def new 
    @form_submission = FormSubmission.new 
end 

def create 
    @form_submission = FormSubmission.new(form_submission_params) 

    if @form_submission.save 
    redirect_to thank_you_path 
    else 
    redirect_to root_path 
    end 
end 

在终端运行耙路线检查你的路由,并确保你有一个路由到该点到form_submissions#新form_submissions#创建。

当你点击提交按钮,您将可以查看在日志中传递的参数,它应该是这个样子

Parameters: {"utf8"=>"✓", "authenticity_token"=>"someRandomStuff", "form_submission"=>{"first_name"=>"value entered in first_name field", "last_name"=>"value entered in last_name field"}, "commit"=>"Value of submit button"} 

你真的创建一个名为FormSubmission资源?

+0

嘿,非常感谢你,我所需要的只是第二种方法。 – kdweber89

+0

...是的,我知道它听起来很愚蠢,但我正在创建一个名为From Submission的资源。 (这不是我的选择) – kdweber89

1

我认为你做错了。

这是你应该做的:

def new 
    @form_submission = FormSubmission.new 
end 

def create 
    @form_submission = FormSubmission.new(form_submission_params) 
    if @form_submission.save 
    redirect_to thank_you_path 
    else 
    redirect_to root_path 
    end 
end 

正如评论所说,

“新”动作用来初始化你的ressource为空或默认值。

“创建”动作用于保存您的新资源

相关问题