#会員登録機能の実装
###作業内容
1.usersテーブルにnicknameカラムを追加
2.ビューを追加
3.ストロングパラメータを追加
4.バリテーションの追加
###1.usersテーブルにnicknameカラムを追加する
usersテーブルにnicknameカラムをstring型で追加する
$ rails g migration Addカラム名Toテーブル名 カラム名:データ型
となるので
$ rails g migration AddNicknameToUseres nickname:string
とターミナルで実行
マイグレーションの実行
$ rake db:migrate
・RailsはAdd ~~ ToUsersのように最後に記述するテーブル名でカラムを追加するテーブルを判断しているので、ファイル名は正しく打ち込む
###2.ビューの追加
サインアップ画面にnicknameを入力するフォームと、アイコン画像をアップロードできるフォームを作成。
・サインアップ画面はRailsのform_forメソッドを使って記述する。
・ニックネームは『テキストフィールド』のフィールドを生成する
・アイコン画像は『ファイルフィールド』のフィールドを生成する
####生成方法
テキストフィールド
<%= f.text_field :カラム名 %>
ファイルフィールド
<%= f.file_field :カラム名 %>
のフォームタグを利用すると生成される。
※new.html.erbは新規作成するテキスト
###3.ストロングパラメータを追加
まずnicknameとimageが設定されていないため、deviseのstrong_parametersに新しく許可するパラメーターを追加する必要がある。
そこで、deviseのdevise_parameter_sanitizerメソッドを使用する。
###●devise_parameter_sanitizer
・strong_parametersに対してパラメータをー追加できる。
・before_actionに設定する※
・記述するのはDeviseのコントローラを継承したコントローラかもしくはApplicationController
コード
devise_parameter_sanitizer.permit(追加したいメソッドの種類, keys: [追加したいパラメーター名])
引数の値(処理)
- :sign_up(新規登録時)
- :sign_in(ログイン時)
- :account_update(レコードの更新時)
複数パラメータを追加する場合
devise_parameter_sanitizer.permit(追加したいメソッドの種類, keys: [:パラメーター1, :パラメーター2,..])
『,』カンマで区切る。
注意
※直接before_actionに設定してはいけない
devise_parameter_sanitizerを呼び出すためのメソッドを作成してそのメソッドを呼び出すようにする。
例
before_action :configure_permitted_parameters
def configure_permitted_parameters
# devise_parameter_sanitizerメソッドを呼び出す
end
すべてのコントローラがApplicationControllerを継承しているため、この記述ではすべてのコントローラのアクションの前でdevise_parameter_sanitizerメソッドが呼び出される。
devise_parameter_sanitizerメソッドはdeviseで追加されたメソッドなので、Deviseのコントローラ以外で呼び出すことができない。よって、before_actionを適応するコントローラを指定する。
before_actionではifというオプションを指定することができる。これはbefore_actionを呼び出す条件を指定するもの。今回はコントローラの種類を指定するので以下のように記述する。
例
before_action :メソッド名, if: :コントローラ名?
例
before_action :configure_permitted_parameters, if: :devise_controller?
devise_controllerが動いた時のみこのアクションを事前に動かしたいので、ifオプションを利用してそのように設定する。
※configure_permitted_parametersはdeviseで利用出来るパラメーターを設定でるdevise関連のストロングパラメーターの管理メソッド。
###4.バリテーションの追加
バリテーションとは
オブジェクトがDBに保存される前に、そのデータが正しいかどうかを検証する仕組み
###今回やりたい事
・nicknameが入力されていないとエラーがでるようにバリテーションを設定する。
・nicknameの入力が必須と分かるようテキストフィールドにプレイスホルダーを設定する
###●validation(検証)
入力フォームを通じてビューからサーバーへ側へパラメーターが送られてきた際、正常な値か検証できる機能。
###●validates :カラム名, presence: true
フォームの中身があるか検出し、無い場合は保存しない。
例
userのnicknameの入力を必須にする場合
class User < ApplicationRecord
validates :nickname, presence: true
と記述する。
###● placeholder: ''
読み:(プレイスホルダー)
・フォームの値が空の時に、''で囲んだ文字を薄く表示しておくことができる。
・入力する人が、何を入力するか分かりやすくなる
今回はnicknameの入力欄に反映させたいので、text_fieldメソッドのオプションとして、以下のように利用する。
<%= f.text field :nickname, placeholder:'ニックネームを入力(必須)' %>
・ニックネームを設定していないとエラーがでるようにした
・ニックネームの入力欄にプレイスホルダーを設定できた
以上