Rails 5中未允许的参数

首先,我想简单地在我发送到back-end的当前对象中获取一个对象。

我有这个简单的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 

但我仍然无法访问project_criteria参数,如下所示:

 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使用标准而不是标准在我看来 – 这是正确的,因为它应该是多元化的),但它也不起作用。

有人有解决方案吗?

这并不是“标准”这个词给你带来问题的变化(虽然你可以添加一个自定义变形器来获得你喜欢的单数和复数版本,如果你真的想要的话)。

问题是您必须明确允许嵌套对象的字段。

改变你目前的参数:

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

对此(对于单个嵌套对象):

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

您处理多个嵌套对象的事实使您的情况更加复杂,因此您必须传递一个哈希:

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