Как моделировать вложенные ресурсы с помощью RABL?

Я хочу настроить вложенный маршрут в своем проекте 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. Возможно, я неправильно понимаю назначение child элементов в RABL. Насколько я понимаю, они не приведут меня к пути 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.


person JJD    schedule 19.06.2013    source источник


Ответы (1)


Я реализовал нечто подобное, используя перед фильтрами в контроллере.

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
person Brent    schedule 13.07.2013
comment
Но действительно ли это обеспечивает вложенный маршрут, такой как users/:id/places? Я не хочу перезаписывать поведение действия index по умолчанию. - person JJD; 14.07.2013