class Api::<%= api_version.upcase %>::<%= plural_table_name.camelize %>Controller < Api::<%= api_version.upcase %>::ApiController

before_action :set_<%= singular_parent_name %>
before_action :set_<%= singular_table_name %>, only: [:show, :update, :destroy]

# GET /api/<%= api_version %><%= route_url %>
def index
  render_collection(@<%= singular_parent_name %>.<%= plural_table_name %>.all, :<%= plural_table_name %>)
end

# GET /api/<%= api_version %><%= route_url %>/1
def show
  render_result(@<%= singular_table_name %>.as_api_response(:basic))
end

# POST /api/<%= api_version %><%= route_url %>
def create
  @<%= "#{singular_table_name} = #{singular_parent_name}.#{plural_table_name}.new(#{singular_table_name}_params)" %>

  if @<%= singular_table_name %>
    render_result(@<%= singular_table_name %>.as_api_response(:basic), :created)
  else
    render_error(@<%= singular_table_name %>.errors.full_messages.first, :unprocessable_entity)
  end
end

# PATCH/PUT /api/<%= api_version %><%= route_url %>/1
def update
  if @<%= singular_table_name %>.update(<%= singular_table_name %>_params)
    render_result(@<%= singular_table_name %>.as_api_response(:basic))
  else
    render_error(@<%= singular_table_name %>.errors.full_messages.first, :unprocessable_entity)
  end
end

# DELETE /api/<%= api_version %><%= route_url %>/1
def destroy
  @<%= singular_table_name %>.destroy
end

private

# Use callbacks to share common setup or constraints between actions.
def set_<%= singular_parent_name %>
  @<%= singular_parent_name %> = <%= parent_class_name %>.find(params[:id])
end
def set_<%= singular_table_name %>
  @<%= singular_table_name %> = @<%= singular_parent_name %>.<%= plural_table_name %>.find(params[:id])
end

# Only allow a trusted parameter "white list" through.
def <%= "#{singular_table_name}_params" %>
  params.require(:<%= singular_table_name %>).permit(<%= attributes_names.map { |name| ":#{name}" }.join(', ') %>)
end

end