2016-04-14 6 views
-1

私はレールのフォームで動作していますが、誰かがそれをすばやく見ることができるかどうか疑問に思っていました。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はわからないということであるように私のコントローラである..and。たとえ私の価値が空であっても、どうやって知ることができますか?それを解決するために私は何ができますか?

+0

あなたの 'new'アクションはここで何をすべきでしょうか? 'new'は主にオブジェクトをインスタンス化するために使用され、それに続いて' create'アクションが続きます。このアクションは、オブジェクトを作成するための強力なパラメータからホワイトリストのパラメータを受け入れるべきです。 – dp7

+0

新しいアクションあなたは新しいフォームを作成し、作成アクションであなたのデータを保存します。また、アプリケーションをデバッグするために 'pry' gemを使用してください。 – user2322409

答えて

2

フォームへの標準的なアプローチは、新しいアクションが「GET」であり、リソースの作成に関する新しいビューを表示するために使用されます。フォーム 'フォームのフィールドを持つアクションを作成するためのPOSTは、paramsハッシュに追加されました。お使いのコントローラメソッドは

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にそのポイントへのルートを持っていることを確認する必要があります。あなたが送信ボタンをクリックすると

あなたはログに渡されるパラメータを表示することができます、それはあなたが本当にFormSubmissionというリソースを作成している

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"} 

ようになっているはず?

+0

おかげさまで、私が必要としていたのは2番目の方法でした。 – kdweber89

+0

...はい、私はそれがグーフィーのように聞こえることは知っていますが、私は投稿からのリソースを作成しています。 (それは私の選択ではなかった) – 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を初期化するために使用されます。

"create"アクションはあなたの新しいリソースを保存するために使用されます

関連する問題