6
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?

More than 3 years have passed since last update.

ユーザー管理機能を実装する。 | Ruby on Rails

Last updated at Posted at 2020-08-24
  1. Gemfile に $ gem 'devise' を追記して、$ bundle install する。

Devise の設定ファイルを作成し、 User モデルを作成する。

  1. $ rails g devise:install を実行して、Devise の設定ファイルを作成する。
  2. $ rails g devise user を実行して、Devise の機能を持つ User モデルを作成する。
    • この時に、ルーティングに devise_for :users という Devise の機能へリクエストするためのルーティングが生成される。
  3. $ rails db:migrate を実行して、Devise の機能を持つ User モデルをマイグレートする。
  4. ログイン画面等の Devise が持つビューファイルを変更したい場合は、$ rails g devise:views を実行してビューファイルを作成する。

メールアドレスとパスワード以外の値を受け取れるようにする。

  • Devise では、メールアドレスとパスワードしか値を受け取らないようにストロングパラメータが記述されているので、任意でフォームを追加した場合には、その値を受け取れるように記述する必要がある。
_controller.rb
class ApplicationController < ActionController::Base
  before_action :configure_permitted_parameters, if: :devise_controller?

  protected
  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:追加したフォームの名前])
  end
end

ログインしている時としていない時で表示が変わるようにする。

  • Devise をインストールすると、ユーザーがサインインしているかどうかを判断する user_signed_in? メソッドが使用できる。
.html
<% if user_signed_in? %>
  <!-- ユーザーがサインインしている場合に実行する処理を記述する。 -->
<% else %>
  <!-- ユーザーがサインアウトしている場合に実行する処理を記述する。 -->
<% end %>

送信したフォームの情報にサインインしているユーザーの情報を追加したい場合…

_controller.rb
class PostsController < ApplicationController
  private
  def post_params
    params.require(:post).permit(:title, :content).merge(user_id: current_user.id)
      # form_with を使用して送信される情報を取得するストロングパラメータに .merge メソッドを使用して、current_user (現在ログインしているユーザー) の ID を結合させる。
  end
end
6
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
6
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?