gpt4 book ai didi

ruby-on-rails - 有条件地应用带有 :if => condition in rails 4 的 skip_before_filter

转载 作者:行者123 更新时间:2023-12-04 07:23:31 25 4
gpt4 key购买 nike

我有一个 Events如果事件是公开的,我想在其上跳过身份验证的 Controller 。

在我的 ApplicationController我有这个电话要设计的authenticate_user!

class ApplicationController < ActionController::Base
before_action :authenticate_user!
end

现在,在我的事件表中,我有一个名为 public 的 bool 字段.我用它来检查事件是否公开。像这样在 EventsController
class EventsController < ApplicationController
skip_before_action :authenticate_user!, only: :show, if: Proc.new { :is_public? }
end

但由于某种原因,这不起作用。所以我不得不这样做:
class EventsController < ApplicationController
skip_before_action :authenticate_user!, only: :show
before_action :authenticate_user!, unless: :is_public?

def is_public?
@event.present? && @event.is_public
end
end

如果 @event.public = true,这将按预期工作并跳过身份验证因为上面重复了 before_filter跳过后的逆条件。

我想知道:
  • 我所做的是正确的吗?
  • 这是否对性能有任何影响。如果是,那么有没有更好的方法?
  • 最佳答案

    关于回调(之前,之后,围绕行动)的rails文档实际上非常糟糕。看到这个类似的问题:skip_before_filter ignores conditionals

    所以我总是引用 rails 指南。你感兴趣的部分在这里:http://guides.rubyonrails.org/action_controller_overview.html#other-ways-to-use-filters

    我不完全确定这也适用于跳过过滤器,但值得一试。

    仅仅通过调用不同的过滤器不应该对性能产生影响。性能问题通常来自广泛的数据库查询或其他外部系统调用。

    我主要担心的是很难理解为什么会有这么多 before_action 事情发生......

    关于ruby-on-rails - 有条件地应用带有 :if => condition in rails 4 的 skip_before_filter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19345738/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com