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

zer*_*uno 13 ruby-on-rails callback actioncontroller

我知道使用以下代码:

before_action :signed_in?, only: [:new]

该行动new将是否执行signed_in?返回true,而是如果我想的new时候要执行的动作signed_in?返回false,我必须做什么?例如,我是否必须创建一个名为的新方法not_signed_in?

这是我的signed_in?方法

def signed_in?
  !@current_user.nil?
end
Run Code Online (Sandbox Code Playgroud)

Mar*_*pka 21

before_action不会像您想象的那样工作 - 如果回调返回,它不会阻止执行操作false.我会以一点点不同的方式解决你的问题,例如:

before_action :redirect_to_root, :if => :signed_in?, :only => :new

# ...
private
def redirect_to_root
  redirect_to root_path
end
Run Code Online (Sandbox Code Playgroud)


小智 7

before_action :new, unless: -> { signed_in? }
Run Code Online (Sandbox Code Playgroud)

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

def your_action_called
  redirect_to :new unless signed_in?
  [...code ...]
end
Run Code Online (Sandbox Code Playgroud)