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_many
和accepts_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]} )