我想在我的Rails项目中设置一个嵌套路由,如下所示:
# config/routes.rb
DemoApp::Application.routes.draw do
namespace :api, defaults: {format: :json} do
namespace :v1 do
resources :places, only: [:index]
resources :users do
resource :places
end
end
end
devise_for :users, controllers: { sessions: "sessions" }
ActiveAdmin.routes(self)
end
我使用RABL templates来呈现JSON内容。可能是我误解了RABL中child
元素的目的。据我所知,他们不会引导我进入如下所示的RESTful路径。另一方面,请告诉我RABL是否不支持嵌套资源。
如何为嵌套路线输出JSON,例如...?如何编写与路由users/:id/places
匹配的RABL模板?
http://localhost:3000/api/v1/users/13/places.json
我不想要显示用户信息。 不可以通过以下路径检索用户数据:
http://localhost:3000/api/v1/users/13.json
http://localhost:3000/api/v1/users.json
在项目中,我使用CanCan 1.6.9.和Devise 2.2.3.
答案 0 :(得分:0)
我在控制器中使用过滤器之前已经实现了类似的功能。
class Api::PlacesController < ApplicationController
before_filter :find_user
def index
if @user
@places = @user.places
else
...
end
end
private
def find_user
@user = User.find(params[:user_id]) if params[:user_id]
end
然后在api / places / index.json.rabl
collection @places
attributes :id, :name, etc