如果before_action返回false,如何执行操作

我知道使用以下代码:

before_action :signed_in?, only: [:new]

如果signed_in?将执行new动作signed_in? 返回true,但是如果我想在signed_in?时执行new操作signed_in? 返回false我该怎么办? 我是否必须创建一个名为not_signed_in?的新方法not_signed_in?

这是我的signed_in? 方法

 def signed_in? !@current_user.nil? end 

before_action无法正常工作 – 如果回调返回false ,则不会阻止执行操作。 我会以一点点不同的方式解决你的问题,例如:

 before_action :redirect_to_root, :if => :signed_in?, :only => :new # ... private def redirect_to_root redirect_to root_path end 
 before_action :new, unless: -> { signed_in? } 

尽管如此,我认为更好地重新定位被称为的动作。

 def your_action_called redirect_to :new unless signed_in? [...code ...] end 

如果你想覆盖所有其他方法
before_action :signed_in?
除了新动作,你最好使用:except代替:only
像这样:
before_action :signed_in?, except: :new