デフォルトの AngularJS $resource アクションをマップしたいと思います:
'get': {method:'GET'}
'save': {method:'POST'}
'query': {method:'GET', isArray:true}
'remove': {method:'DELETE'}
'delete': {method:'DELETE'}
これらの 5 つの Rails RESTful ルートに:
'show': {method:'GET'} -> get
'create': {method:'POST'} -> save
'update': {method:'PUT'} -> save
'index': {method:'GET', isArray:true} -> query
'delete': {method:'DELETE'} -> remove or delete
を除くすべてが適切にマップされsave
ます。create
リクエストとして動作しPOST
ます。PUT
しかし、リソースを保存するときにリクエストに変更したいのですが、id != null
# This factory needs a smarter $save() method
myServices.factory 'Message', ['$resource', ($resource) ->
Message = $resource "api/users/:user_id/messages/:id",
user_id: '@user_id'
id: '@id'
,
# update should not be needed
update:
method: 'PUT'
Message
]
myApp.controller "UsersShowCtrl", ["$scope", "$routeParams", "User", "Message", ($scope, $routeParams, User, Message) ->
$scope.user = User.get({id: $routeParams.user_id})
$scope.myMessage = new Message {user_id: $routeParams.user_id}
$scope.submitMyMessage = ->
# This should just be:
# $scope.myMessage.$save()
# rather than:
unless $scope.myMessage.id?
$scope.myMessage.$save()
else
$scope.myMessage.$update()
]
params[:message]
最終的には、送信されたパラメーターも変更して、ルート文字列に直接アタッチするのではなく、デフォルトのレールのネストされたパラメーターに名前空間を付けることができるようにparams
したいと思いますが、最初に $resource を変更する最善の方法を知る必要があります。