カテゴリー
サインイン 新規登録

間違いや改善の指摘

内容の技術的な誤り・誤字脱字やミスのご報告・解説やトピックの追記/改善のご要望は教材をさらに良くしていく上でとても貴重なご意見になります。

少しでも気になった点があれば、ご遠慮なく投稿いただけると幸いです🙏

実際には誤りではなく勘違いであっても、ご報告いただけることで教材のブラッシュアップにつながります。

質問ポリシー①

教材受講者みなさんのスムーズな問題解決のために、心がけていただきたいことがあります。

教材の内容に関する質問を投稿しましょう

教材の内容に関係のない質問や教材とは異なる環境・バージョンで進めている場合のエラーなど、教材に関係しない質問は推奨していないため回答できない場合がございます。

その場合、teratailなどの外部サイトを利用して質問することをおすすめします。教材の誤字脱字や追記・改善の要望は「文章の間違いや改善点の指摘」からお願いします。

2-6

新規登録の際にユーザーの必要な情報を持たせる

deviseはデフォルトだとemailとパスワードの情報を保存します。それ以外の情報を保存するには、カラムを追加する必要があります。今回のパートではユーザーの名前を保存するための開発をしていきます。

学習キーワード

Copied!
- カラム - マイクレーション - ストロングパラメーター - devise_controller

カラムを追加するマイグレーションファイルを作成する

現状のusersテーブルにはemailとパスワードのカラムしかないので、ユーザーの名前や性別、自己紹介の文章やプロフィール画像を保存するカラムが存在しません。
なので、まずusersテーブルにカラムを追加するマイグレーションファイルを作成します。
以下のコマンドを実行してください。

bash
1
Copied!
$ rails g migration AddColumnToUser

上記のコマンドを実行することで、db/migrateフォルダの中にマイグレーションファイルが作成されます。

作成されたマイグレーションファイルを以下のように編集してください。

Copied!
db/migrate └── xxxxxx_add_culomn_to_user.rb
db/migrate/xxxxxx_add_culomn_to_user.rb
123456789101112
Copied!
class AddColumnToUser < ActiveRecord::Migration[5.1] def change # ==========ここから追加する========== add_column :users, :name, :string, null: false, default: '', limit: 100 add_column :users, :self_introduction, :string, limit: 500 add_column :users, :sex, :integer, null: false, default: 0 add_column :users, :img_name, :string, null: false # ==========ここまで追加する========== end end

カラムを追加する際は以下のように書きます。

ruby
1
Copied!
add_column :テーブル名, :カラム名, :データ型, オプション

オプションにはカラムの桁数を指定する:limitやカラムのnullを許可しないnull: falseなどがあります。

マイグレーションファイルを実行して、usersテーブルにカラムを追加する

マイグレーションファイルを作成しただけでは、テーブルに反映されないので、マイグレーションファイルをテーブルに反映するにはマイグレーションファイルを実行する必要があります。以下のコマンドで実行できます。

bash
1
Copied!
$ rails db:migrate

これでusersテーブルに新規登録の際に必要なカラムを追加しました。

追加したカラムを新規登録する際やアカウントを編集するときに保存できるようにする

deviseを使っている場合、デフォルトにないカラム(emailとpasswordカラム以外)を保存できるようにするにはstrong parameterにカラムの追加の許可を指示してあげる必要があります。以下のような形でapp/controllers/application_controller.rb内に configure_peritted_parametersを追加してください。

参考 )strong parameterとは

Copied!
app └── controllers └── application_controller.rb
app/controllers/application_controller.rb
1234567891011121314
Copied!
class ApplicationController < ActionController::Base # ==========ここから追加する========== before_action :configure_permitted_parameters, if: :devise_controller? protect_from_forgery with: :exception protected def configure_permitted_parameters devise_parameter_sanitizer.permit(:sign_up, keys: %i(name self_introduction sex img_name)) end # ==========ここまで追加する========== end

上記のコードでサインアップする際にnameカラム・self_introductionカラム・sexカラム・img_namカラムを保存できるようになります。

またkeysのコードは以下のように書くこともできます。

ruby
1
Copied!
keys: [:name, :self_introduction, :sex, :img_name]

ただ%記法を使った方がより短く書くことができるので今回は%iを使っています。%記法については以下のリンクを参考にしてください。

参考)Rubyで%記法(パーセント記法)を使う

また、以下のコードはCSRFへの対策のためです。セキュリティに関しては本教材の趣旨ではないので説明は省略します。興味がある人は調べてみてください。

ruby
1
Copied!
protect_from_forgery with: :exception

参考)クロスサイトリクエストフォージェリ (CSRF)

以上で今回のパートは終了です。