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