Rails は、ネストされたリソースに :shallow オプションを提供しています。これを頼りにしています。
浅いリソースは次のようになります。
resources :posts do
resources :comments, :only => [:index, :create]
end
resources :comments, :only => [:show, :update, :destroy]
私が遭遇した問題は、Angular リソースを使用して Rails リソースをマップしようとするときです。ngResource では 1 つの URI しか定義できないため、/posts/:post_id/comments/:id
または/comments/:id
.
私が望むのは、ngResource がメソッドが URI と補間をオーバーライドできるようにすることです。例えば:
app.factory('Comment', ['ngResource', function ($resource) {
$resource('/comments/:id', { 'id': '@id', post_id: '@post_id' },
index: { method: 'GET', url: '/posts/:post_id/comments', isArray: true },
create: { method: 'POST', url: '/posts/:post_id/comments' },
show: { method: 'GET' },
update: { method: 'PUT' },
destroy: { method: 'DELETE' }
);
}]);
おそらくngResource以外の別のモジュールで、これは可能ですか? それとも、Comments と Comment という 2 つのサービスを作成するだけでよいのでしょうか?