how to execute an action if the before_action returns false

后端 未结 3 1240
感情败类
感情败类 2021-01-04 04:39

I know that with the following code:

before_action :signed_in?, only: [:new]

the action new will be executed if the signed_in

相关标签:
3条回答
  • 2021-01-04 05:12

    before_action doesn't work as you think - it doesn't prevent action to be executed if callback returns false. I would solve your problem in a little bit different manner, for example:

    before_action :redirect_to_root, :if => :signed_in?, :only => :new
    
    # ...
    private
    def redirect_to_root
      redirect_to root_path
    end
    
    0 讨论(0)
  • 2021-01-04 05:20
    before_action :new, unless: -> { signed_in? }
    

    alltough i think its better to redirect in the action which was called.

    def your_action_called
      redirect_to :new unless signed_in?
      [...code ...]
    end
    
    0 讨论(0)
  • 2021-01-04 05:25

    If you want to cover all other methods with
    before_action :signed_in?
    except new action, you'b better to use :except instead of :only
    like this:
    before_action :signed_in?, except: :new

    0 讨论(0)
提交回复
热议问题