Railsでログイン時のルーティングを定義する(deviseのauthenticatedみたいなやつ)


deviseを使うとconfig/routes.rbに

config/routes.rb
Rails.application.routes.draw do
  authenticated :user do
    root to: 'dashboard#show', as: :user_root
  end

  root to: 'landing#show'
end

こんな感じで、ログイン時とそうでない時のルーティングが書けます。

authenticated-instance_method
http://www.rubydoc.info/github/plataformatec/devise/master/ActionDispatch/Routing/Mapper#authenticated-instance_method

これをdevise以外で実現したい時は、constraintsで実現できます。

config/routes.rb
class AuthenticatedConstraint
  def matches?(request)
    request.session['user_id'].present?
  end
end

Rails.application.routes.draw do
  constraints AuthenticatedConstraint.new do
    root to: 'dashboard#show', as: :user_root
  end

  root to: 'landing#show'
end

便利(\( ⁰⊖⁰)/)