2014-10-23 2 views
0

Я хотел бы избавиться от исключения RecordNotFound, если и только если запрос JSON. Теперь, если я делаю это для skip_before_action, я бы ниже:Rescue From If JSON

skip_before_action :verify_authenticity_token, if: :json_request? 

Есть ли синтаксис для этого в rescue_from? Что-то вроде:

rescue_from ActiveRecord::RecordNotFound, :with => :record_not_found, if: :json_request? 

метод Helper:

protected 
    def json_request? 
    request.format.json? 
    end 
+0

Вы могли бы спасти его так или иначе, и повторно выдать его, если это не запрос JSON? – Albin

ответ

4

I Предполагаю, если запрос не JSON, то вы хотите повысить? Если это так, вы должны быть в состоянии сделать это

rescue_from ActiveRecord::RecordNotFound { request.format.json? ? record_not_found : super } 

ИЛИ

rescue_from ActiveRecord::RecordNotFound, with: lambda{|e| request.format.json? ? record_not_found(e) : raise(e) } 

Они будут иметь одинаковое воздействие, потому что если блок дается он присваивает его options[:with], где, как будто with: поставляется он использует это в качестве блока и игнорирует любой другой блок передается к нему

rescue_from принимает аргумент splat под названием *klasses и block. Затем он анализирует *klasses, чтобы определить параметры, в которых он заботится только о :with. Затем он применяет блок :with к ключу (ключам), который будет представлять имена классов исключений для обработки.

Нет дополнительных опций, которые будут подтверждены.

Обратите внимание, я не проверял это

+0

Я попытался использовать ваш синтаксис с ошибкой: синтаксическая ошибка, неожиданное '}', expecting => – steventnorris

+0

@steventnorris Извините, отредактированный мой ответ, забыл писателю лямбда, поскольку он должен быть вызываемым объектом. – engineersmnky

+0

Все еще дает ошибки. На вызов html: super, вызываемый вне метода. На вызов json: неправильное количество аргументов (0 для 1) [ссылается на метод record_not_found] – steventnorris

0

Вы можете сделать:

rescue_from ActiveRecord::RecordNotFound do 
    record_not_found if json_request? 
end 

Я не думаю, что есть другой синтаксис для этого точного случае :-(

+0

Это не работает. Он отображает пустую страницу html на записи, которая не найдена. – steventnorris