こんにちは、おーしまです。
今回は、自動車レビューアプリのユーザー登録機能を実装していきます。
ユーザー登録機能とは、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は自己紹介文という意味で使っています。)
ターミナルで、
- rails db:migrate
。。。おや?
ここで、エラーが発生。
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にすればいけるってことだけ分かればおっけい。
次。
- rails db:reset
で、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 %>
<ログイン前>
<ログイン後>
「うい」は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に記述します。
これだけは、まだ見ないと書けません。そのうち覚えると信じて。。。
こんな感じで、ユーザー登録機能は実装できました。
前より成長したのか、意外と簡単にできました。
最後のストロングパラメータは、そろそろ覚えたい頃ですね。
頑張ろう。
今回はここまでです。
それではまた〜。