私は次のコードでそれを知っています:
before_action :signed_in?, only: [:new]
アクションnew
はsigned_in?
がtrueを返した場合に実行されますが、代わりにsigned_in?
がfalseを返したときにnew
アクションを実行したい場合はどうすればよいですか行う?たとえば、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