我一直在用这个把头发扯下来。我已经阅读了所有关于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"}}
如果你发布你的视图代码,我们可能会很快找到问题。