if model.nil? && controller_name == "application"
  routes = Rails.application.routes.routes.reject(&:internal).collect do |route|
    { name: route.name,
      verb: route.verb,
      path: route.path.spec.to_s.gsub(/\(\.format\)\Z/, ''),
      controller: route.requirements[:controller],
      action: route.requirements[:action],
      array: ['index'].include?(route.requirements[:action]) }
  end

  json.set! 'comment', ActiveRecord::Base.connection.database_comment

  json.set! 'routes' do
    json.array!(routes) do |route|
      controller = if controller_name = route[:controller]
        begin
          controller_param = controller_name.underscore
          const_name = "#{controller_param.camelize}Controller"
          const = ActiveSupport::Dependencies.constantize(const_name)
          if const.ancestors.include?(StandardAPI::Controller)
            const
          else
            nil
          end
        rescue NameError
        end
      end

      next if controller.nil?

      resource_limit = controller.resource_limit if controller.respond_to?(:resource_limit)

      json.set! 'path', route[:path]
      json.set! 'method', route[:verb]
      json.set! 'model', controller.model&.name
      json.set! 'array', route[:array]
      json.set! 'limit', resource_limit
    end
  end

  json.set! 'models' do
    models.each do |model|
      json.set! model.name do
        json.partial! partial: schema_partial(model), model: model
      end
    end
  end

else

  json.set! 'attributes' do
    model.columns.each do |column|
      json.set! column.name, {
        type: json_column_type(column.sql_type),
        default: column.default ? model.connection.lookup_cast_type_from_column(column).deserialize(column.default) : nil,
        primary_key: column.name == model.primary_key,
        null: column.null,
        array: column.array,
        comment: column.comment
      }
    end
  end

  json.set! 'limit', resource_limit # This should be removed?
  json.set! 'comment', model.connection.table_comment(model.table_name)

end

