0

我想在我的 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 模板来呈现 JSON 内容。可能是我误解了childRABL 中元素的用途。据我了解,它们不会将我引向如下所示的 RESTful 路径。另一方面,请告诉我 RABL 是否不支持嵌套资源。

如何为嵌套路由输出 JSON,例如 ... ?如何编写与路线匹配的 RABL 模板users/:id/places

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。设计 2.2.3。

4

1 回答 1

0

我已经在控制器中使用 before 过滤器实现了类似的东西。

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
于 2013-07-13T00:07:14.133 回答