教材の内容に関係のない質問や教材とは異なる環境・バージョンで進めている場合のエラーなど、教材に関係しない質問は推奨していないため回答できない場合がございます。
その場合、teratailなどの外部サイトを利用して質問することをおすすめします。教材の誤字脱字や追記・改善の要望は「文章の間違いや改善点の指摘」からお願いします。
deviseはデフォルトだとemailとパスワードの情報を保存します。それ以外の情報を保存するには、カラムを追加する必要があります。今回のパートではユーザーの名前を保存するための開発をしていきます。
Copied!- カラム
- マイクレーション
- ストロングパラメーター
- devise_controller
現状のusersテーブルにはemailとパスワードのカラムしかないので、ユーザーの名前や性別、自己紹介の文章やプロフィール画像を保存するカラムが存在しません。
なので、まずusersテーブルにカラムを追加するマイグレーションファイルを作成します。
以下のコマンドを実行してください。
bash1 Copied!$ rails g migration AddColumnToUser
上記のコマンドを実行することで、db/migrateフォルダの中にマイグレーションファイルが作成されます。
作成されたマイグレーションファイルを以下のように編集してください。
Copied!db/migrate
└── xxxxxx_add_culomn_to_user.rb
db/migrate/xxxxxx_add_culomn_to_user.rb123456789101112 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
カラムを追加する際は以下のように書きます。
ruby1 Copied!add_column :テーブル名, :カラム名, :データ型, オプション
オプションにはカラムの桁数を指定する:limit
やカラムのnullを許可しないnull: false
などがあります。
マイグレーションファイルを作成しただけでは、テーブルに反映されないので、マイグレーションファイルをテーブルに反映するにはマイグレーションファイルを実行する必要があります。以下のコマンドで実行できます。
bash1 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.rb1234567891011121314 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のコードは以下のように書くこともできます。
ruby1 Copied!keys: [:name, :self_introduction, :sex, :img_name]
ただ%記法を使った方がより短く書くことができるので今回は%iを使っています。%記法については以下のリンクを参考にしてください。
また、以下のコードはCSRFへの対策のためです。セキュリティに関しては本教材の趣旨ではないので説明は省略します。興味がある人は調べてみてください。
ruby1 Copied!protect_from_forgery with: :exception
以上で今回のパートは終了です。