如何使用RABL为嵌套资源建模?

时间:2013-06-19 12:19:58

标签: ruby-on-rails json nested-resources rabl view-templates

我想在我的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.

1 个答案:

答案 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