如果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