2015-12-11 3 views
3

Есть ли способ пропустить фильтр before для действия при вызове API?Rails Skip Before Filter on API Call

Как правило, я хочу, чтобы before_filter x выполнялся EXCEPT, когда я выполняю вызов API.

skip_before_filter :x, :except => API CALL BEING MADE 

ответ

2

В контроллере вы можете добавить

skip_before_action :x, only: WHEN API CALL BEING MADE 

Я думаю, вы хотели бы only и не except

+0

Вы правы - неряшливая ошибка с моей стороны. но реальный вопрос заключался в том, что происходит после единственного/кроме – RuneScape

+0

, вам нужно указать имя действия, которое обрабатывает вызов API. Посмотрите на [link] (http://stackoverflow.com/questions/27204055/rails-skip-before-action-doesnt-work), у которого есть аналогичный вопрос –

+0

Я хочу его для каждого звонка, сделанного API – RuneScape

2

Это не является прямым ответом на ваш вопрос, но тот факт, что вы вы хотите, чтобы различные варианты поведения API и веб-запросов могли быть запахом, что ваши запросы API могут обрабатываться отдельным контроллером (я уверен, что есть различия в ответах, которые вы также отправляете). Код, вероятно, будет более чистым с меньшим разветвлением внутри контроллеров. Вы даже можете наследовать обоих контроллеров от контроллера «Base», который выполняет общие запросы для устранения дублирования.

Во всяком случае, except и only может принимать только имена действия контроллера, так что в вашем методе обратного вызова вы могли бы рассмотреть ветвления на request.headers["Content-Type"] == 'application/json или request.xhr?

3

Это зависит немного в том, как вы определяете вызов API. Если это какой-либо запрос в формате JSON вы могли бы сделать что-то вроде этого:

skip_before_action :x if: -> { request.format.json? } 

Это, кажется, не быть идеальным решением, хотя, и это могло бы быть лучше, чтобы сделать отдельные контроллеры для Web и API. Вы могли бы сделать что-то вдоль этих линий:

class APIController < ApplicationController 
    # API-specific filters 
end 

class SomeOtherController < APIController 
    # your API actions 
end 

И вы могли бы сделать то же самое для сети, а затем настроить свои маршруты, чтобы принять запрос на правильное действие контроллера.

Надеюсь, что это поможет.

+0

спасибо вам! – RuneScape