2016-08-19 44 views
5

首先,我想简单地获取当前对象内部的对象,并将其发送给我的back-endRails 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 

但我仍然不能访问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,但它也不起作用。

有人有这方面的解决方案吗?

回答

15

这不是“标准”这个词给你带来问题的转折点(尽管如果你真的想要的话,你可以添加一个自定义的偏转器来获得单数和复数的版本)。

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

改变当前PARAMS:

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]}) 
+0

感谢您的答复,但使用两种方式,你建议ed给出:'ActiveRecord :: AssociationTypeMismatch(ProjectCriterium(#39449900)预计,得到数组(#17940440)):' – developer033

+0

我想你是传递JSON作为散列?这可能听起来很愚蠢,但是...如果你想在最后一个数组,传递一个哈希(我的例子)。如果你最后想要一个散列,传递一个数组(这似乎是你想要的),所以只需用方括号替换这些数组,并给它一个镜头。 – MarsAtomic

+0

嗯,我是通过我发布在我的问题的最初部分的那种方式,但它是作为'哈希'('“project_criteria”=> {“0”=> {“benefit”=>“1”名称“=>”标准1“,”类型“=>”类型1“},”1“=> {”benefit“=>”3“,”name“=>”Criteria 2“,”type“=> “Type 2”}}}}')。顺便说一下,我想在最后一个数组..但不幸的是,你的两个建议给我这个错误。 – developer033