Как моделировать вложенные ресурсы, используя 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.

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/place /index.json.rabl

collection @places
attributes :id, :name, etc
Другие вопросы по тегам