Это не должно быть слишком сложно.Я бы, вероятно, поместил эти маршруты мобильного API в их собственное пространство имен, чтобы помочь с организацией.Обычно для каждой таблицы, с которой взаимодействует ваше мобильное приложение, у вас будет отдельный контроллер.
Ниже приведен пример шаблона, который я использую, когда мне нужен новый контроллер REST.Надеюсь, это вам поможет.
# -------------------------------------------------------------------------------------
# ___ ___ _
# / __\___ _ __ _ _ / _ \__ _ ___| |_ __ _
# / / / _ \| '_ \| | | | / /_)/ _` / __| __/ _` |
# / /__| (_) | |_) | |_| | / ___/ (_| \__ \ || (_| |
# \____/\___/| .__/ \__, | \/ \__,_|___/\__\__,_|
# |_| |___/
# -------------------------------------------------------------------------------------
# This is a template controller which represents what most admin controllers look like.
# -------------------------------------------------------------------------------------
# Search for Camel and replace it with your camel case object (i.e. User)
# Search for snake and replace it with your snake case object (i.e. user)
# When search/replacting be sure to not include the 's'. This will handle plural/singular
# -------------------------------------------------------------------------------------
module V1
module Admin
class CamelsController < ApplicationController
# GET /admin/snakes
def index
if admin_can :snake_read
render json: Camel.all, each_serializer: Adm::CamelSerializer
end
end
# GET /admin/snakes/:id
def show
if admin_can :snake_read
render json: @snake, serializer: Adm::CamelSerializer
end
end
# POST /admin/snakes
def create
if admin_can :snake_create
@snake = Camel.new(snake_params.merge!(creator: current_user))
if @snake.save
render json: @snake, serializer: Adm::CamelSerializer, status: :created
else
render json: { errors: @snake.errors }, status: :unprocessable_entity
end
end
end
# GET /admin/snakes/new
def new
if admin_can :snake_create
render json: Camel.new, new: true, serializer: Adm::CamelSerializer, root: "snake"
end
end
# GET /admin/snakes/:id/edit
def edit
if admin_can :snake_update
render json: @snake, edit: true, snake_id: params[:id], serializer: Adm::CamelSerializer, root: "snake"
end
end
# PATCH /admin/snakes/:id
def update
if admin_can :snake_update
if @snake.update(snake_params)
head :no_content
else
render json: { errors: @snake.errors }, status: :unprocessable_entity
end
end
end
# DELETE /admin/snakes/:id
def destroy
if admin_can :snake_delete
@snake.destroy
head :no_content
end
end
private
def snake_params
params.require(:snake).permit(:name).merge!(updater: current_user)
end
end
end
end
В этом примере предполагается, что вы используете Active Model Serializer, который значительно упрощает рендеринг JSON.https://github.com/rails-api/active_model_serializers