【问题标题】:Extend AngularJS $resource to map to Rails RESTful Routes (particularly $save to create AND update)扩展 AngularJS $resource 以映射到 Rails RESTful Routes(特别是 $save 以创建和更新)
【发布时间】:2013-03-02 15:33:50
【问题描述】:

我想映射默认的 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 请求。但是当我保存具有id != null 的资源时,我想将其更改为PUT 请求

# 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()

]

我最终还想修改提交的参数,以便我可以将它们命名为默认的rails嵌套参数,即params[:message],而不是将它们直接附加到根params字符串,但首先我需要知道如何最好地修改 $resource。

【问题讨论】:

  • 请问这是什么语言?有点有趣,你写的是角度的,但方式更像是你谈到的红宝石......它是如何编译成 js 的?浏览器知道吗?

标签: javascript ruby-on-rails api rest angularjs


【解决方案1】:

在我的脑海中,这个 save() 方法怎么样?

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::save = ->
        if @id?
            @update()
        else
            @create()

    Message
]

【讨论】:

  • 谢谢,这适用于一个资源,但我不想将它添加到每个资源中。我宁愿扩展 $resource 模块来响应这个不同的 api,但我对 javascript 和 Angular 的理解还不够好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-24
  • 2022-01-15
  • 2014-03-16
  • 2012-10-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多