Rails предотвращают before_action на определенных маршрутах - PullRequest
0 голосов
/ 25 апреля 2018

Есть ли способ запретить запуск before_action на определенных маршрутах? Скажем, публиковать маршруты, которые делают действия API? Мое действие в настоящее время делает это

before_action :setContext

    def setContext
        @site = Site.find_by!(host: request.subdomain)
        @page = Page.find_by!(site_id: @site.id, slug: request.path)
    end

А на маршрутах API, Страница найти 404

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Вы можете использовать опции only и except:

before_action :setContext, only: [:show, :edit]
before_action :setContext, except: [:new, :destroy]

Вы также можете использовать опцию if: или unless: с лямбдой:

before_action :setContext, if: -> { request.format.html? }
before_action :setContext, unless: -> { request.format.json? }

Вы также можете использовать skip_before_action, что полезно, если before_action определен в родительском классе:

class ApplicationController
   before_action :authenticate_user!
end

class ThingsController < ApplicationController
  skip_before_action :authenticate_user!, only: [:index, :show]
end
0 голосов
/ 25 апреля 2018

Один способ проверить на request.format.json?.

before_action :setContext

def setContext
  unless request.format.json?
    @site = Site.find_by!(host: request.subdomain)
    @page = Page.find_by!(site_id: @site.id, slug: request.path)
  end
end

Другой способ использования except с before_action.

before_action :setContext, except: [:api_actions] # put all comma separated routes in place of api_actions

def setContext
  @site = Site.find_by!(host: request.subdomain)
  @page = Page.find_by!(site_id: @site.id, slug: request.path)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...