2016-08-19 8 views
5

まず、現在のオブジェクトの中にオブジェクトを入れて、私がback-endに送信したいだけです。Rails 5の許容されないパラメータ

私は(フォームから生成された)この単純なJSONを持っている:

{ 
    "name": "Project 1", 
    "project_criteria": [ 
    { 
     "name": "Criterium 1", 
     "type": "Type 1", 
     "benefit": "1" 
    }, 
    { 
     "name": "Criterium 2", 
     "type": "Type 2", 
     "benefit": "3" 
    } 
    ] 
} 

マイclasses

class Project < ApplicationRecord 
    has_many :project_criteria 
    accepts_nested_attributes_for :project_criteria 
end 

class ProjectCriterium < ApplicationRecord 
    belongs_to :project 
end 

ProjectsController:

def project_params 
    params.require(:project).permit(:name, project_criteria: []) 
end 

しかし、私はまだできませんアクセスあなたは以下を参照することができますよう8パラメータ:

Started POST "/projects" for 127.0.0.1 at 2016-08-19 16:24:03 -0300 
Processing by ProjectsController#create as HTML 
    Parameters: {"project"=>{"name"=>"Project 1", "project_criteria"=>{"0"=>{"benefit"=>"1", "name"=>"Criterium 1", "type"=>"Type 1"}, "1"=>{"benefit"=>"3", "name"=>"Criterium 2", "type"=>"Type 2"}}}} 
Unpermitted parameter: project_criteria # <----------- 

注:がある - - 私の意見で

ところで、私はすでにどの(代わりに基準クリテリウムを使用しようとしました複数形にする必要があるので正しい)をhas_manyaccepts_nested_attributes_forに入力してください。

誰かがこれに対する解決策を持っていますか?

答えて

15

あなたが問題を起こしているのは「基準」という言葉の活用ではありません(あなたが本当に望むなら、あなたが好む単数形と複数形を得るためにカスタムのインフレクターを追加することはできますが)。

問題は、ネストされたオブジェクトのフィールドを明示的に許可する必要があることです。 (単一ネストされたオブジェクトに対して)これに

params.require(:project).permit(:name, project_criteria: []) 

は、あなたの現在のparamsを変更

あなたの場合は、多少あなたが複数のネストされたオブジェクトを扱っているという事実によって悪化する
params.require(:project).permit(:name, project_criteria: [:name, :type, :benefit]) 

ので、代わりにハッシュを渡す必要があります:

params.require(:project).permit(:name, { project_criteria: [:name, :type, :benefit]}) 
+0

お返事ありがとうございますが、お勧めします両方の方法を使用してedが与えます: 'ActiveRecord :: AssociationTypeMismatch(ProjectCriterium(#39449900)、Arrayを取得しました。(#17940440)): – developer033

+0

JSONをハッシュとして渡していると思いますか?これはばかげて聞こえるかもしれませんが...最後に配列が必要な場合は、ハッシュを渡してください(私の例)。最後にハッシュが必要な場合は、配列(渡したいもの)を渡すので、中括弧を四角い中カッコで置き換えてショットを付けてください。 – MarsAtomic

+0

さて、私は自分の質問の最初の部分に投稿しましたが、それは 'hash =' {"0" => {"benefit" = "" 1 " "タイプ" => "タイプ1"}、 "1" => {"利益" => "3"、 "名前" => "クリテリアム2"、 "タイプ" => "タイプ2"}}}} ')。ところで、私は最後に配列が欲しいですが、残念ながらあなたの提案の両方が私にそのエラーを与えます。 – developer033

関連する問題