2014-01-14 23 views
0

我有一个子资源,它将拥有与其相关的全套方法。我开始实施创建(我有后端工作)。基本上我希望能够用这种结构使用restangular子资源

http://127.0.0.1:8000/rest/parent_resource/<parent_id>/child_resource/ 

哪里是一个整数字段标识父对象的工作。例如:

http://127.0.0.1:8000/rest/parent_resource/87/child_resource/ 

出于安全原因,我不想将集合作为一个整体呈现给最终用户。因此,obj.child_resource = [{blah}]不是我正在考虑的方法。 parent_resource /集合由一个用户拥有,并且可以从可以更新/删除他们对集合的贡献的其他用户对集合进行贡献(创建)。

我失去了如何设置这与restangular。我想摆弄这一点,但我不认为我的附加标识符URI是正确的前进方式:

app.factory('ParentResource', function (Restangular) { 
    return { 
      getList: function() { 
      return Restangular.all('rest/parent_resource').getList() 
      } 
      , get: _.memoize(
      function (id) { 
       return Restangular.one('rest/parent_resource', id).get() 
      }) 
      , createChild: function(parentId, field_1, field_2) { 

      var newChild = { 
       "field_1": field_1 
       , "field_2": field_2 
      } 

      return Restangular.all('rest/parent_resource/' + parentId + '/childResource').post(newChild) 
     } 
    } 
}) 

用法会是这样的

ParentResource.get(87).then(function(parentObj){ 
    parentObj.createChild(1,2) 
}) 
+0

一个旁注:'我不想将整个系列展示给最终用户 - 它被称为'通过默默无闻的安全'。如果收集ID是如此敏感的数字 - 考虑用随机散列替换它(与后端的收集ID相关联)。否则,可以通过迭代收集ID来查找现有ID – borisano

回答

1

我要调查此解决方案:

return Restangular.one('rest/parent_resource', parentId).all('child_resource').post(newChild) 

在这种情况下:

app.factory('ParentResource', function (Restangular) { 
    return { 
      getList: function() { 
      return Restangular.all('rest/parent_resource').getList() 
      } 
      , get: _.memoize(
      function (id) { 
       return Restangular.one('rest/parent_resource', id).get() 
      }) 
      , createChild: function(parentId, field_1, field_2) { 

      var newChild = { 
       "field_1": field_1 
       , "field_2": field_2 
      } 

       return Restangular.one('rest/parent_resource', parentId).all('child_resource').post(newChild) 
     } 
    } 
}) 
+0

这有效 - 我不知道它是否是首选解决方案,也不是我随时可以诊断副作用 - 在此阶段,我正在使我的应用程序启动并运行将优化/稍后进行生产 – akaphenom