Progate_Ruby on Rails5道場コース3
1・目標物の確認
2・画像の名前を格納するカラムの追加
・ターミナルで「rails g migration マイグレーションファイル名」
・作成したマイグレーションファイルのchangeの中で
「add_column :users :追加するカラム名 :データ型」
・ターミナルで「rails db:migrate」
3・初期画像の設定
・user_controllerのcreateアクションに「image_name= "初期画像のファイル名"」
・show.html.erbに画像を表示させるコードを追加
<img src="<%=”/user_images/#{@user.image_name}”%>">、
※HTMLのコードにRubyのコードを埋め込むため書き方要注意
4・画像編集機能
・画像選択:editのinputタグで「type="file"」(nameはimage)
・form_tagに{multipart: true}を追加
・送信された画像ファイル、画像名の保存
+もし画像があれば保存なのでif params[:image]〜end
+データベースで保存される名前は指定どおり「"#{@user.image_name}.jpg"」
+image=params[:image]で画像を受け取る
+Fileクラスのwriteメソッドを使ってファイルを生成
File.binwrite("public/user_images/#{画像名}", image.read)
5・パスワードカラムの作成
・ターミナルで「rails g migration マイグレーションファイル名」を実行し
作成されたファイルに「add_column :users :password :データ型」
・「rails db:migrate」でデータベースに反映
・Userモデルにバリデーションを追加
・「rails console」を起動して「user=User.find_by(id:1)」
「user.password="好きな文字列"」でsaveメソッド
・データベースにパスワードが保存される
6・ログインフォーム
・ルーティング「"login"」で「"users#login_form"」
・ビューファイル「login_form.html.erb」を作成して指定のコードを貼り付け
・コントローラにlogin_formアクションを定義
・application.html.erbに「ログイン」リンクの作成
7・ログイン処理の追加
・ルーティング「post "login"=>"users#login"」
・ビューファイル「login_form.html.erb」
+form_tagを追加
+メールアドレス(email)、パスワード(password)にnameタグ追加
・コントローラにloginアクションを定義
+@user=User.find_by(email: params[:email],password: params[:password])
+ifで条件を「@user」
+成功:session[:user_id]に@user.idを代入、flash、redirect
+失敗:render
・application.html.erbにifでsession[:user_id]がtrueならログインユーザーのidを表示させる文を追加
8・ユーザーが存在しない場合
・7で作成したloginアクションのif文に失敗した場合の処理を追加
+@error_messageに指定の文を代入
+初期値の表示用に@email=params[:email](@passwordはparams[:password])
・login_form.html.erb
+指定のコードを指定の場所に貼り付けif文の条件は@error_message(表示内容も同様)
+emailに「value="<%= @email%>"」(passwordも同様)
9・ユーザー登録時にログイン状態にする
・new.html.erbに指定のコードを貼り付け、name="password"、valueにemailと同じように初期値
・createアクションにpasswordの情報追加、登録が成功した場合はsession[:user_id]=@user.id処理させる
10・ログアウト機能
・ログアウト「logout」のルーティング(post)
・コントローラにlogoutアクションを追加
+session[:user_id]をnil
+フラッシュ、リダイレクト
・application.html.erbにログアウトのリンク先を追加、{method: "post"}を忘れずに!
+if文で条件session[:user_id]、
trueの場合は指定のものだけ表示、elseでfalseの場合の表示に分ける
11・ログインユーザー名を表示
・applicationコントローラにメソッドを追加(set_current_user)
+メソッドに@current_user=User.find_by(id: session[user_id])を追加
+before_actionでアクションが呼び出される際に共通の処理をさせる
before_action :set_current_user
・application.html.erbのsession[:user_id]を@current_userに修正
+表示される内容は名前なので「@current_user.name」
+link_toメソッドを使ってユーザー詳細へ(/users/@current_user.id)
12・ログインしていない場合の制限
・applicationコントローラにアクセス制限用のメソッドを作成
+@current_userがnilの場合はフラッシュ、リダイレクト
・posts、usersコントローラにbefore_actionを追加
+特定のアクションのみで実行→before_action :共通メソッド名,{only:[アクション名]}
13・ログインしている場合の制限
・applicationコントローラにログインユーザ制限用のメソッドを作成
+@current_userがtrueの場合はフラッシュ、リダイレクト
・users、homeコントローラにbefore_actionが指定のアクションのみ実行されるよう追加。
14・自分の情報のみ編集できるように制限する
・usersコントローラにユーザーを確かめるためのメソッドを追加
+ログイン中のユーザーid(@current_user.id)と
編集したいユーザのid(params[:id])が同じでない場合(if a!=b〜end)は
フラッシュ、リダイレクト
+usesコントローラの先頭に「before_action」を
指定のアクションのみ実行されるよう追加。