,我收到服务器错误:
ActionController::ParameterMissing (param not found: page):
app/controllers/json_api/pages_controller.rb:39:in `filter_page_params'
app/controllers/json_api/pages_controller.rb:17:in `update'
window.app.factory 'Page', ($resource) ->
...
ReStFull: ( ->
return $resource('/json/pages/:id', {id: '@id'}, {update: {method: 'PATCH'}})
)
只有PUT有效!
我的Rails4控制器操作如下所示:
def update
if @page.update_attributes(filter_page_params)
render json: @page
else
render nothing: true, status: 400
end
end
强参数私有函数:
def filter_page_params
params.require(:page).permit(:parent_id, :name, :grid_layout_id)
end
更新时有一个预加载钩子,并且已从DB加载@page
有人知道是什么导致角度来破坏请求吗?
我赞成任何帮助。 亲切的问候, 亚历
答案 0 :(得分:3)
当你在angular-resource中使用PATCH请求时,标题的Content-Type将被设置为'application / xml',我假设你的后端只响应json,这就是你得到错误的原因。您需要手动将其设置为'application / json'。
在稳定版本中执行此操作的一种方法是使用$ httpProvider设置默认标头
$httpProvider.defaults.headers.common["Content-Type"] = 'application/json'
在不稳定版本1.1.1+中,您可以直接在$ resource中设置它,我没有尝试过,但这里提到它:https://groups.google.com/forum/#!msg/angular/33kV8fjFcME/0f0y2mL2DBgJ
$resource '/users/:id',
{ id: '@id' }
update:
method: 'PATCH'
headers: { 'Content-Type': 'application/json' }