我有一个由rails new my_api --api
和rails g scaffold model name age
构建的基本API。
我想更改model_params
方法以接受JSON数组。我怎样才能做到这一点?
当前方法是默认方法:
def model_params
params.require(:model).permit(:name, :age)
end
我尝试过this:
def model_params
params.require(:model).permit?([:name, :age])
end
但我知道
Completed 400 Bad Request in 10ms (ActiveRecord: 10.3ms)
ActionController::ParameterMissing (param is missing or the value is empty: model):
app/controllers/models_controller.rb:83:in `model_params'
app/controllers/models_controller.rb:29:in `create'
我发出的卷曲请求是
curl -H "Accept: application/json" -H "Content-type: application/json" -d '[{"name": "Fred", "age": "5"}, {"name": "Fred", "age": "5"}, {"name": "Fred", "age": "5"}]' "http://localhost:3000/models"
答案 0 :(得分:0)
您的强参数需要一个名为model
的对象,该对象具有键name
和age
,因此您需要以这种格式制作请求正文。
{ "model" : {
"name": "Ross",
"age": "25"
}
但是您想要的是
[{"name": "Fred", "age": "5"},
{"name": "Fred", "age": "5"},
{"name": "Fred", "age": "5"}]
所以这应该工作。
{"model": {
"name_and_age": [
{"name": "Fred", "age": "5"},
{"name": "Fred", "age": "5"},
{"name": "Fred", "age": "5"}
]
}
}
要执行此操作,您必须更改从许可证中删除:name, :age
并添加name_and_age
之类的方法。
def model_params
params.require(:model).permit(:name_and_age)
end
答案 1 :(得分:0)
params.require(:model).permit(:name).permit!(:data)
您可以参考此This