ruby-on-rails - 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
解决方案
您可以使用only
和except
选项:
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_action
which 很有用:before_action
class ApplicationController
before_action :authenticate_user!
end
class ThingsController < ApplicationController
skip_before_action :authenticate_user!, only: [:index, :show]
end
推荐阅读
- windows - 如何在后台运行windows powershell脚本
- flutter - Flutter Web 应用程序无法在移动浏览器上运行。如果在移动浏览器上运行颤振代码,如何调试错误?
- javascript - 如何在不呈现子项的组件中呈现子项?
- scala - 为什么我从 Spark 编写的任何文件都不是人类可读的?
- .net - MassTransit.QuartzIntegration.ScheduledMessageJob:无法实例化没有空构造函数的类型(参数'ScheduledMessageJob')'
- spring-boot - Spring Boot @PostMapping is there a way to detect null fields in a incoming request body?
- python - 不传递请求参数如何在 django 中获取登录用户名
- linux - Yocto:使用 Bitbake 构建图像时出错
- loops - 如何使用 VBA 中的任何按键跳出循环 - Excel
- docker - 为 Ubuntu 检索 MinGW32