ngResourceでネストされたアイテムの追加ができず困っています
1つの Shop のなかに複数の Shelf がありその中に Item が格納されているケースを想定しています。
ngResourceを使ってjsonでレンダリングされた "/api/shops/:shop_id/shelfs/:shelf_id/items/:id" を呼び出して、データベースに item を追加しようとしています。
《controller》shop_edit.coffee
angular.module("myApp").controller "shopEdit", ($scope, Shop, Shelf, Item) ->
$scope.init = ->
# Rails側でパラメータを取得してng-initからshop_idを設定
shop_id = $scope.shop_id
# Shopを取得
Article.get(id: shop_id).$promise.then (shop) ->
$scope.shop = shop
return
$scope.saveItem = (shop, shelf) ->
# 保存
$scope.newItem = { name: shelf.item.name, shop_id: shop.id, shelf_id: shelf.id }
Item.save($scope.newItem)
$scope.newItem = newItem
return
《view》edit.html.slim
(一部抜粋)
.item
input name="name" ng-model="shelf.item.name" ng-blur="saveItem(shop, shelf)"
《service》shop.coffee
angular.module('myApp').factory 'Shop', ($resource) ->
$resource('/api/shops/:id', { id: @id }, { update: { method: 'PUT' }})
《service》item.coffee
angular.module('myApp').factory 'Item', ($resource) ->
$resource('/api/shops/:shop_id/shelfs/:shelf_id/items/:id',
{ shop_id: '13495' },
{ shelf_id: '93' },
{ update: { method: 'PUT' }})
このとき、動的な値 shop_id と shelf_id をcontorollerから受け取れずに困っています。
$scope.newItem = { ... } の中で shop_id と item_id を指定し、Item.save($scope.newItem) で service 側に渡しているのですが正しく受け取れないようで困ってます(:shop_id, :shelf_id が空欄になり保存に失敗しています)。
また、なぜか、以下のように :shelf_id を :shop_id に置き換えないと正しく保存されません...
$resource('/api/shops/:shop_id/shelfs/:shop_id/items/:id',
{ shop_id: '13495' },
{ update: { method: 'PUT' }})
原因が検討もつかず困っています... どうかよろしくお願いいたします。