首页 > 解决方案 > Rails 阻止特定路线上的 before_action

问题描述

有没有办法防止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

标签: ruby-on-rails

解决方案


您可以使用onlyexcept选项:

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

您还可以将if:orunless:选项与 lambda 一起使用:

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

如果在父类中定义了,您还可以使用skip_before_actionwhich 很有用:before_action

class ApplicationController
   before_action :authenticate_user!
end

class ThingsController < ApplicationController
  skip_before_action :authenticate_user!, only: [:index, :show]
end

推荐阅读