我有一个Events
控制器,如果事件是公开的,我想在其上跳过身份验证。
在我的ApplicationController
我有这个要求设计的电话authenticate_user!
class ApplicationController < ActionController::Base
before_action :authenticate_user!
end
现在,在我的 Events 表中,我有一个名为public
. 我用它来检查事件是否公开。像这样在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
在跳过后重复了相反的条件。
我想知道:
- 我所做的是正确的吗?
- 这是否对性能有任何影响。如果是,那么有没有更好的方法?