我知道使用以下代码:
before_action :signed_in?, only: [:new]
如果new
返回true,则会执行操作signed_in?
,但如果我希望new
返回false时执行signed_in?
操作,我该怎么办?去做?我是否必须创建一个名为not_signed_in?
的新方法?
这是我的signed_in?
方法
def signed_in?
!@current_user.nil?
end
答案 0 :(得分:19)
before_action无法正常工作 - 如果回调返回false
,则不会阻止执行操作。
我会以一点点不同的方式解决你的问题,例如:
before_action :redirect_to_root, :if => :signed_in?, :only => :new
# ...
private
def redirect_to_root
redirect_to root_path
end
答案 1 :(得分:7)
before_action :new, unless: -> { signed_in? }
尽管我认为最好重新定位被称为动作的动作。
def your_action_called
redirect_to :new unless signed_in?
[...code ...]
end
答案 2 :(得分:0)
如果您希望涵盖除before_action :signed_in?
之外的所有其他方法,除了新操作,您最好使用:except
代替:only
<像这样:
before_action :signed_in?, except: :new