Ограничение рельсов только ответом на запросы JSON и XML - PullRequest
7 голосов
/ 16 января 2012

Есть ли способ глобально определить приложение rails для обслуживания только json и xml и, соответственно, ошибки при любых других запросах?

Я думаю, что это что-то вроде блока before_filter и responseds_to вApplicationController, но это так, как мое расследование дошло до меня.

Ответы [ 2 ]

10 голосов
/ 17 января 2012

Просто объявите это на уровне класса на вашем контроллере, используя respond_to. Это будет применяться ко всем вашим контроллерам, если вы сделаете это на ApplicationController

class ApplicationController < ActionController::Base
  respond_to :xml, :json
  …
end

Также читайте о ActionController::Responder классе для дополнительных опций.

3 голосов
/ 16 января 2012

Чтобы сделать json-ответ на ошибки, просто добавьте следующий код в application_controller:

rescue_from Exception, :with => :render_error
rescue_from ActiveRecord::RecordNotFound, :with => :render_not_found
rescue_from ActionController::RoutingError, :with => :render_not_found
rescue_from ActionController::UnknownController, :with => :render_not_found
rescue_from ActionController::UnknownAction, :with => :render_not_found

private

def render_not_found(exception)
  # logger.info(exception) # for logging 
  respond_to do |format|
    render json: {:error => "404"}, status: 404
  end    
end

def render_error(exception)
  # logger.info(exception) # for logging
  respond_to do |format|
    render json: {:error => "500"}, status: 500
  end
end

public

def some_public_func
 #do sthg
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...