自己解決できなかったのでこちらで質問させていただきます。
ng-resourceを使ってRailsで作ったAPIにアクセスし、ショップ(Shop)の作成、アイテム(Item)の作成/更新/削除を永続化できる機能を実装しています。1つのShopには複数のItemが紐付いており、Shopを作成すると作成されたidでItemのeditページにredirectさせたいです。
Shop(1) <-> Item(n)
viewから、shop.name と shop.place を送信できるフォームをつくりShopControllerで受け取った情報をShopServiceに渡して保存。保存されたidをもとにeditページにredirectさせたいのですがその方法がわかりません。phpではmysqli_insert_idなどで直前にinsertされたアイテムのidが取れますがAngularで同じようなことをするにはどうすればよいのでしょうか。
単純に new_shop.id とかで取得できるのでは...と思ったのですがダメで、保存された値(ここではid)を取得する方法が思いつかず、詰まってしまいました。new_shop の配列には確かに入っている(console.dir new_shopで確認しました)のですが取り出し方がわかりません。。
こういった場合は、サーバーサイドのcontroller側にredirect処理を任せた方がbetterなのでしょうか。できればAngular側のcontrollerでredirect処理までを完結させたいのですが良い方法がありましたら教えていただきたいです。
どうかよろしくお願いいたします。
= = =
controllers/ShopController.coffee
lang
1angular.module('test-20150703').controller "ArticleController", ($scope, $window, $location, Shop, Item) -> 2 $scope.addShop = (shop) -> 3 @shopService = new Shop(serverErrorHandler) 4 # 受け取った情報をdbに保存 5 new_shop = @shopService.create(name: shop.name, place: shop.place) 6 # Objectのなかに確かにname,placeとidも格納されている 7 console.dir new_shop 8 # undefinedになってしまいます 9 console.log new_shop.id 10 $window.location.href = "/shops/【ここに入るidを動的に変更させたい】/edit" 11 return
= = =
services/ShopService.coffee
lang
1angular.module('test-20150703').factory 'Shop', ($resource, $http) -> 2 class Shop 3 constructor: (errorHandler) -> 4 @service = $resource('/api/shops/:id', 5 { id: '@id' }, 6 { update: { method: 'PUT' }}) 7 @errorHandler = errorHandler 8 9 find: (id, successHandler) -> 10 @service.get(id: id, ((shop)-> 11 successHandler?(shop) 12 shop), 13 @errorHandler) 14 15 create: (attrs) -> 16 new @service(shop: attrs).$save ((shop) -> attrs.id = shop.id), @errorHandler 17 attrs
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。