4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Railsでログインを押すとログアウトに表示を変更する方法

Posted at

Railsでログインを押すとログアウトに表示を変更する方法

今回はRuby on Railsでログイン機能を実装します!
ログイン機能を実装しようとすると、ログイン・ログアウト・新規登録のボタンが3つできるかもしれません。今回は3つできるボタンを2つで実装し、ログインボタンを押したらログアウトと表示できるようにしていきたいと思います!(イメージは以下の動画です)
ログイン.gif

注意
この記事は、すでにログイン・ログアウト・新規登録の実装ができていることを前提に書いています。

目次

1.View周り
2.コントローラー設計
3.ルート周り

View周り

まず、ビューページのどこかに以下のようにログイン・ログアウト・新規登録のボタンを実装しているかもしれません。

tweets/index.html.erb
  <%= link_to "ログイン", tweets_path %>
  <%= link_to "新規登録", new_user_registration_path %>
  <%= button_to 'ログアウト', destroy_user_session_path, method: :delete %>

しかしWebサイトでは、ログイン機能はほとんどヘッダーに実装されることが多いボタンになります。そこで、今回はヘッダーに書いてみましょう!
また、今回はif文を使用していくので以下のようにビューページを編集します。

layouts/application.html.erb
<% if user_signed_in? %>
    <a href="/users/sign_out" data-method="delete" class="button1">
        <span class="button1__text">Log out</span>
    </a>
<% else %>
    <a href=" /users/sign_in.html" class="button1">
        <span class="button1__text">Log in</span>
    </a>
<% end %>
    <a href=" /users/sign_up.html" class="button1">
        <span class="button1__text">Sign up</span>
    </a>

コントローラー設計

次にコントローラーを作成します。

コマンド
rails g controller users

作成したコントローラーに以下を書きます。

users_controller.rb
class UsersController < ApplicationController
    def test_destroy
        delete destroy_user_session_path
        @request.env["devise.mapping"] = Devise.mappings[:user] 
        assert_response :success
    end
end

ルート周り

最後にルートを書きます。
devise_for :usersの下に書くといいと思います!

routes.rb
  devise_scope :user do
    get '/users/sign_out', to: 'devise/sessions#destroy'
    delete '/users/sign_out', to: 'devise/sessions#destroy'
  end

以上です!

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?