自分用のアウトプット。
ユーザー関連の機能はGemを使用していく。
devise … ユーザー管理機能を簡単に実装するためのGem。
Gemfileの最後の行に gem ‘devise’ と追記し、ターミナルで
bundle install
rails g devise:install
rails g devise user でdeviseのUserモデルを作成する。
上記のコマンドを実行すると、ルーティングに自動で
devise_for :users が追加される。
devise_for はユーザー機能に必要なルーティングを一気に生成するdeviseのメソッド。
この状態だと、モデルとマイグレーションは作成されたが、usersテーブルはまだ作られていない。
(http://localhost:3000 にアクセスするとエラーになる)
マイグレーションを実行すると、usersテーブルが作成され、ページも表示できる。
ログインの有無で表示を変えるには
application.html.erb を編集。
user_signed_in?メソッド … ユーザーがログインしていればtrue、ログアウト状態ならfalseを返す。
link_toで作成したリンクは、デフォルトでGETメソッドを使用している。
他のメソッドを使用する場合は、 method: :◯◯ と指定が必要。
(GETの場合は省略していい)
未ログインユーザーには新規投稿ページへのリンクが表示されないが、
/tweets/new へ直接アクセスすれば投稿が出来てしまう状態なので、
未ログインの場合ルートパスに遷移するように設定をする。
リダイレクト … 本来受け取ったパスとは別のパスへ転送する機能。
tweets_controller.rbの全てのアクションに対して、「ユーザーがログインしていなかったらindexアクションにリダイレクトする」という機能をつける。
unless … ifと同様に条件式の返り値で条件分岐して処理を実行する構文。
ifはtrueのときにelseまでの処理が実行されるのに対して、
unlessはfalseのときにelseまでの処理が実行される。
redirect_toメソッド … リダイレクト処理を行うときに使用する。
コントローラー等での処理が終わった後、アクションに対応するビューファイルを参照せずに、別ページへリダイレクトさせる。
redirect_to action: :リダイレクト先となるアクション名
exceptオプション … before_actionで使えるオプション。この後に指定したアクションに対しては、事前に処理は実行されない。
コントローラーの記述
before_action :move_to_index, except: [:index, :show]
indexアクションへのリダイレクト無限ループを防ぐため、indexも追加。
詳細表示ページはログインしていないくても見られるようにするため、showを追加。
サインアップ時の名前登録
rails g migration Addカラム名To追加先テーブル名 追加するカラム名:型
表記方法について
スネークケース … 単語の区切りを_(アンダースコア)で表す。
admin_user_comment_creator
キャメルケース … 先頭が小文字、単語の区切りを大文字で表す。
adminUserCommentCreator
アッパーキャメルケース … 先頭も大文字、単語を区切りを大文字で表す。
AdminUserCommentCreator
Railsの命名規則として、
メソッド名や変数名はスネークケース、クラス名はアッパーキャメルケースを使う。
rails g migration AddNicknameToUsers nickname:string
usersテーブルにnicknameカラムをstring型で追加する、というマイグレーションファイルを作成。
サインアップ画面の編集
maxlengthオプション … text_fieldにつけられるオプション。入力可能な最大文字数を指定できる。
<%= d.text_field :nickname, autofocus: true, maxlength: “6” %>
生成したフォームに7文字以上入力すると、自動で6文字までにカットされる。
deviseでログイン機能を実装した場合、ユーザー情報に関するパラメーターを制限するストロングパラメーターは、deviseのGem内に記述されているため、編集できない。
devise_parameter_sanitizerメソッド … deviseのUserモデルに関わる「ログイン」「新規登録」などのリクエストからパラメーターを取得する。
permitメソッドと組み合わせ、deviseに定義されているストロングパラメーターに対して自分で新しく追加したカラムも指定して含むことができる。
コントローラー記述例
private
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:deviseの処理名, keys: [使用するキー])
end
deviseの処理名
:sign_in … ログイン処理
:sign_up … 新規登録処理
:account_update … アカウント情報更新処理
第一引数で指定した処理に該当するとき、keysに指定された名前を持つパラメーターの取得を許可する。
deviseを削除する場合は、導入の時と逆の手順でgをdにして実行していく。
というところまで来たんですが、そこからエラーエラーエラー。
原因不明なんですが自分なりに色々試行錯誤した結果ぐちゃぐちゃになり、手も足も出ない状態に。
もっと早くにメンターさんに頼るべきだった…。
ということで次回このエラー解決のところからスタートです。