不允许在 Rails 4 中使用嵌套参数



我一直在用这个把头发扯下来。我已经阅读了所有关于Rails4集成强params的文档,现在所有内容都必须明确列入白名单。但它仍然无法通过!!!

这是我的设置

型号

class Course < ActiveRecord::Base
has_many :chapters
accepts_nested_attributes_for :chapters
end
class Chapter < ActiveRecord::Base
belongs_to :course
end

控制器

class CoursesController < ApplicationController
respond_to :json
def create
@course = Course.create permitted_params
respond_with @course
end
private
def permitted_params
params.require(:course).permit(:name, chapters_attributes: [:title, :content])
end
end

来自客户端的JSON

{
"course": {
"chapters": [{
"title": "qwerty",
"content": "foobar"
}],
"name": "Test course"
}
}

服务器日志

Started POST "/json/courses" for 10.0.2.2 at 2014-02-24 15:29:44 +0000
Processing by CoursesController#create as JSON
Parameters: {"course"=>{"chapters"=>[{"title"=>"qwerty", "content"=>"foobar"}], "name"=>"Test course"}}
Unpermitted parameters: chapters
Completed 201 Created in 96ms (Views: 52.1ms | ActiveRecord: 4.1ms)

未经许可的参数:章节。我盯着这个看了好几个小时都没有用。老实说,我不知道自己做错了什么。请告诉我它就在那里,我只是忘记了一些愚蠢的魔法参数,所以我可以继续前进。

我认为您只需要在您的permitted_params方法中更改为"章节":

def permitted_params
params.require(:course).permit(:name, chapters: [:title, :content])
end

而不是"章节属性">

我认为问题不在控制器或模型中,而是在请求中发送的JSON中。

Processing by CoursesController#create as JSON
Parameters: {"course"=>{"chapters"=>[{"title"=>"qwerty", "content"=>"foobar"}], "name"=>"Test course"}}

应该是

Processing by CoursesController#create as JSON
Parameters: {"course"=>{"chapters_attributes"=>[{"title"=>"qwerty", "content"=>"foobar"}], "name"=>"Test course"}}

如果你发布你的视图代码,我们可能会很快找到问题。

相关内容

  • 没有找到相关文章

最新更新