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

时间:2013-11-21 12:01:11

标签: ruby-on-rails callback actioncontroller

我知道使用以下代码:

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

3 个答案:

答案 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