AngularJS の $resource で再び躓く(@_id について)

2014年12月19日 21:34

今回のケースについては後日、ひととおりの解答を得られた。

app.factory("Contact", function($resource) {
  return $resource("/api/contacts/:id", { id: "@_id" },
    {
      'create':  { method: 'POST' },
      'index':   { method: 'GET', isArray: true },
      'show':    { method: 'GET', isArray: false },
      'update':  { method: 'PUT' },
      'destroy': { method: 'DELETE' }
    }
  );
});

このコードは Recipes with Angular.js というサイトの Consuming REST APIs というページに書かれているものだが、Contact に $resource を登録する際、URL のパラメータのデフォルト値として指定するオブジェクトが { id: "@id" } ではなく { id: "@_id" } となっている。そして、その解説も同ページの末尾部分に記されている。

In order to automatically map from id to the _id parameter we used a nice trick of the $resource service. Take a look at the second parameter of the Contact $resource definition: { id: "@_id" }. Using this parameter Angular will automatically set the URL parameter id based on the value of the model attribute _id.

拙訳はこんな感じ。

id を自動的に _id パラメータにマッピングするべく、我々は $resource サービスのナイスなトリックを使いました。Contact の定義 { id: "@_id" } の2番目のパラメータに注目。このパラメータを使えば、Angular は自動的にモデル属性の _id の値に基づいて URL パラメータの id を設定してくれます。