web-dev-qa-db-ja.com

before_actionがfalseを返した場合にアクションを実行する方法

私は次のコードでそれを知っています:

before_action :signed_in?, only: [:new]

アクションnewsigned_in?がtrueを返した場合に実行されますが、代わりにsigned_in?がfalseを返したときにnewアクションを実行したい場合はどうすればよいですか行う?たとえば、not_signed_in?という新しいメソッドを作成する必要がありますか?

これが私のsigned_in?メソッドです

def signed_in?
  !@current_user.nil?
end
13
zer0uno

before_actionは、思ったとおりに機能しません。コールバックがfalseを返した場合でも、アクションの実行が妨げられることはありません。私はあなたの問題を少し異なる方法で解決します、例えば:

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

# ...
private
def redirect_to_root
  redirect_to root_path
end
21
Marek Lipka
before_action :new, unless: -> { signed_in? }

とはいえ、呼び出されたアクションでリダイレクトする方が良いと思います。

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

他のすべての方法をカバーしたい場合
before_action :signed_in?
新しいアクションを除いて、:exceptの代わりに:onlyを使用することをお勧めします
このような:
before_action :signed_in?, except: :new

0