

自己解決できなかったのでこちらで質問させていただきます。  
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

[code]

    angular.module('test-20150703').controller "ArticleController", ($scope, $window, $location, Shop, Item) ->
      $scope.addShop = (shop) ->
      @shopService = new Shop(serverErrorHandler)
      # 受け取った情報をdbに保存
      new_shop = @shopService.create(name: shop.name, place: shop.place)
      # Objectのなかに確かにname,placeとidも格納されている
      console.dir new_shop
      # undefinedになってしまいます
      console.log new_shop.id
      $window.location.href = "/shops/【ここに入るidを動的に変更させたい】/edit"
      return
    
[/code]

= = =

services/ShopService.coffee

[code]

    angular.module('test-20150703').factory 'Shop', ($resource, $http) ->
      class Shop
        constructor: (errorHandler) ->
          @service = $resource('/api/shops/:id',
            { id: '@id' },
            { update: { method: 'PUT' }})
          @errorHandler = errorHandler
    
        find: (id, successHandler) ->
          @service.get(id: id, ((shop)->
            successHandler?(shop)
            shop),
            @errorHandler)
    
        create: (attrs) ->
          new @service(shop: attrs).$save ((shop) -> attrs.id = shop.id), @errorHandler
          console.log (attrs)
          # console.logにてpushされた情報(ここではshop.nameやshop.place)が取れましたが、
          # 保存された情報(shop.id)を取ることができませんでした。
          # articleはundefinedになり中身がみれませんでした...
          attrs
    
[/code]


CC BY-SA 3.0
2015-07-07T01:53:44.083
12104
2015-07-07T01:53:44.083
10431
question
angularjs coffeescript
ng-resourceでDBに保存後、すぐにeditページにredirectさせたい