おーしまブログ

プログラミングやってます

自動車レビューアプリのユーザー登録機能実装

こんにちは、おーしまです。

今回は、自動車レビューアプリのユーザー登録機能を実装していきます。

ユーザー登録機能とは、Twitterでいうところのアカウント機能のようなものですね。
自動車レビューアプリ(car-car)では、ユーザー登録した人だけが、レビュー、コメントをできるようにしたいので、ユーザー登録機能は必須機能の一つになります。新規登録、ログイン、ログアウトができるようにしたいので、毎度お馴染みのdeviseというGemを用いて実装していきます!

まずはターミナルで、deviseを導入していく。

gem 'devise'

ターミナルで、、、

  • bundle install
  • rails g devise:install

で導入完了。

ターミナルで、、、

で、usersモデルとビューファイルたちを作ります。

これでマイグレーションファイルもできるので、その中にカラムを追加します。

      t.string :nickname,           null: false
      t.string :email,              null: false, default: ""
      t.string :encrypted_password, null: false, default: ""
      t.string :favorite_car
      t.text :introduction

もともとある、emailとpasswordの他に、
nicknameとfavorite_carとintroductionカラムを追加。
nicknameとemailとpasswordは必須なので、null: falseを記述。
(ちなみに、introductionは自己紹介文という意味で使っています。)

ターミナルで、

。。。おや?
ここで、エラーが発生。

mysql2::error: specified key was too long; max key length is 767 bytes

なにやら767バイトまでしかダメだよーって感じ?

調べると、database.ymlファイルの
encoding: utf8mb4

encoding: utf8
にするらしい。


そういえば最終課題でも、mb4を消すよう指示されていたけど、ここで引っかかるのか。分かって良かった。
調べる、どうやらmysqlの文字の容量の指定のようなもので、
utf8mb4は、1文字4バイト以上、、utf8は、1文字1~3バイトらしい。
🍣や🍺のような絵文字は4バイト以上なので、utf8では表示されないらしいが、ここでは、utf8にすればいけるってことだけ分かればおっけい。

次。

で、userモデルを作るところから、やり直すとできました。

次は、indexに
ログイン前は、新規登録ボタン、ログインボタン
ログイン後は、ニックネーム、ログアウトボタン、を設置します。

<% if user_signed_in?%>
  <%= current_user.nickname %>
  <%= link_to 'ログアウト', destroy_user_session_path, method: :delete%>
<% else %>
  <%= link_to '新規登録', new_user_registration_path %>
  <%= link_to 'ログイン', new_user_session_path %>
<% end %>

<ログイン前>
f:id:tomo_bb_aki0118115:20201025215911p:plain
<ログイン後>
f:id:tomo_bb_aki0118115:20201025220028p:plain

「うい」はnicknameです。
非常にシンプルですが、見た目は後で、なんとかします。。

if user_signed_in?でログイン中かどうか見分けて、表示を変えています。
ログアウトボタンのmethod: :deleteは忘れずに記述しましょう。

次は、バリデーションです。

validates :nickname, presence: true

特に制限することもないので、nicknameは空欄はだめ、だけです。

次は、ストロングパラメータです。

before_action :configure_permitted_parameters, if: :devise_controller?

  private

  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname, :favorite_car, :introduction])
  end

deviseで新しくカラムを追加した時は、コントローラに記述できないので、applicationcontrollerに記述します。
これだけは、まだ見ないと書けません。そのうち覚えると信じて。。。




こんな感じで、ユーザー登録機能は実装できました。
前より成長したのか、意外と簡単にできました。
最後のストロングパラメータは、そろそろ覚えたい頃ですね。
頑張ろう。



今回はここまでです。
それではまた〜。

ここはどこ おれはだれ それに近いものがあんだよ 始めようとした奴らも迷い始めてる 怖がらせないでよ そりゃ甘くはないけど まだまだ 夢見ていい世界なんでしょ {UVERwould「ハイ!問題作」}