

Rails側はAPIの提供（/api/articles/:id
にて、articleの情報とそれに紐づくitemをjson形式でレンダリングしています）に専念させ、Angular側でjsonを受け取りserviceクラスのfactoryメソッドからデータのやりとりをしようとしています。こちらが現状のコードです。Angularのバージョンは1.4.7を採用しています。

《service》

[code]

    App.factory 'Article', ($resource, $http) ->
      class Article
        constructor: (errorHandler) ->
          @service = $resource('/api/articles/:id',
            { id: '@id' },
            { update: { method: 'PUT' }})
          @errorHandler = errorHandler
    
        find: (id, successHandler) ->
          @service.get(id: id, ((article)->
            successHandler?(article)
            article),
            @errorHandler)
    
        create: (attrs) ->
          new @service(article: attrs).$save()
    
        update: (article, attrs) ->
          new @service(article: attrs).$update {id: article.id}, (-> null), @errorHandler
    
[/code]

こちらをcontrollerから呼び出し、createやupdateを呼んでいます。

《controller》

[code]

    @articleService = new Article(serverErrorHandler)
    @articleService.update($scope.article, title: article.title, description: article.description)
    
[/code]

こちらをできればもう少しスマートに記述したいです。参考書やウェブの情報によると今回のようなアプリケーションでは、$httpサービスは基本的に用いずに$resourceサービスだけで実装するのが一般的と推奨されており、リファクタリングをしようとしているのですが、Angular内部のエラーに詰まり、うまく移行できません...

[code]

    Error: [$resource:badcfg] http://errors.angularjs.org/1.4.0/$resource/badcfg?p0=query&p1=array&p2=object&p3=GET&p4=%2Fapi%2Farticles%2F13495
    
[/code]

* * *

できれば、下記のように（「[Rails+JSフレームワークでリアルタイム掲示板を作成してみる（AngularJS編）](http://www.ohmyenter.com/railsjs%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF%E3%81%A7%E3%83%AA%E3%82%A2%E3%83%AB%E3%82%BF%E3%82%A4%E3%83%A0%E6%8E%B2%E7%A4%BA%E6%9D%BF%E3%82%92%E4%BD%9C%E6%88%90%E3%81%97/)」を参考にしました）serviceクラスではAPIの受け取りだけに専念させシンプルに記述したいです。この方法がやはり推奨なのか、また、コードに良くない点やエラーの原因が見受けられましたら、どうかアドバイスをいただきたいです。読みにくいコードで申し訳ありませんがどうかよろしくお願いいたします。

《service》

[code]

    App.factory 'Article', ($resource) ->
      $resource '/api/articles/1'
    
[/code]

《controller》

[code]

    Article.query (article) ->
      $scope.article = articles
    
    $scope.create = ->
      article = Article.save($scope.Article)
    
[/code]


CC BY-SA 3.0
2015-10-23T06:52:21.190
17972
2015-10-23T08:37:01.480
2015-10-23T08:37:01.480
10441
10441
question
javascript angularjs coffeescript
Angularを採用したRailsアプリケーションで、$httpサービスを使わずに、factoryメソッドからCRUD操作をしたい