LoginSignup
0
0

More than 3 years have passed since last update.

【Rails】ユーザ作成

Posted at

Railsのユーザ作成について

Railsでログイン機能を実装する場合に、ユーザ作成を行うと思います。
今回は、その、ユーザ作成機能について説明していきます。

使用するコントローラ

toppagesコントローラ(サインアップページへ移行するurlがある)
-index

usersコントローラ
-index,show,new,create

の二つです。toppages,usersのように、語尾に「s」を付けているのは、あとあと便利になってくるからです。

使用するモデル

Userモデル
-name:string email:string password_digest:string

ユーザ名、メールアドレス、パスワードを入力とします。

Gemファイルに

gem 'bcrypt', '~>   '

のような記述がありますが、railsに提供されている認証機能です。
この行のコメントアウトを消し、

$ bundle install

を実行し、railsのサーバを再起動させましょう。

また、railsで「bcrypt」を使用する際は、モデル作成時に、

password_digest:string

の記述が必須となります。この記述が無ければ認証ができなくなるので注意しましょう。

コントローラ

topppagesコントローラは、ページの表示だけなので、usersコントローラのみを記述します。

users.rb
class UsersController < ApplicationController
  def index
    @users = User.all.page(params[:page])
  end

  def show
    @user = User.find(params[:id])
  end

  def new
    @user = User.new
  end

  def create
    @user = User.new(user_params)
    if @user.save
      flash[:success] = 'ユーザを登録しました。'
      redirect_to @user
    else
      flash.now[:danger] = 'ユーザの登録に失敗しました'
      render :new
    end

  end

  private

  def user_params
    params.require(:user).permit(:name, :email, :password, :password_confirmation)
  end
end

特筆すべきなのはcreateアクションのuser_paramsのところです。
ストロングパラメータの、password_confirmationは、確認用のパスワードのことです。
password_confirmationが記述されることで、パスワードの確認をプログラムがいい感じにやってのけてくれます。

モデル

ユーザモデルに、has_secure_passwordと記述することでbcryptの認証機能を呼び出すことが出来ます。

user.rb
class User < ApplicationRecord
    has_secure_password
end

ユーザ作成画面

CSSも適用してない最低限の画面です。

new.html.erb
<h1>Sign up</h1>
<p>
<%= form_for(@user) do |f| %>
<p>
<div class="form-group">
    <%= f.label :name, 'Name' %>
    <%= f.text_field :name, class: 'form-control' %>
</div>
<div class="form-group">
    <%= f.label :email, 'Email' %>
    <%= f.email_field :email, class: 'form-control' %>
</div>
<div class="form-group">
    <%= f.label :password, 'Password' %>
    <%= f.password_field :password, class: 'form-control' %>
</div>
<div class="form-group">
    <%= f.label :password_confirmation, 'Confirmation' %>
    <%= f.password_field :password_confirmation, class: 'form-control' %>
</div>
<P>
<%= f.submit 'Sign up', class: 'btn btn-primary btn-block' %>

<% end %>
show.html.erb
<h3 class="panel-title"><%= @user.name %></h3>

これでユーザ作成に必要な主要な部分は完成しました!

0
0
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
0
0