今日の教科書
神戸プログラミングアカデミーチュートリアル
#MVCについて
参考:MVCモデルについて
##メモ
MVC、モデル・コントローラ・ヴーであることはわかっていた。
ただ流れの認識に齟齬があった。VからCにいき、Mでデータを処理してそのままVに渡しておわりかと思っていたが、その前にCからVに表示する命令があったり、VがMを参照する動きがあるのは知らなかった。学び直しはだいじ。
#scaffoldについて
参考:覚えておくと超便利!Ruby on Railsのscaffoldの使い方【初心者向け】
##気になったポイント
###before_action :authenticate_user!について詳しく
【Rails】before_actionの使い方を徹底解説!
authenticate_user!
はdeviceのメソッドの一つ。
https://qiita.com/tobita0000/items/866de191635e6d74e392
全てのアクションの前にログインユーザだけが使えるようにしてくれるということ。
###1ユーザーにつき、1profileしか作れないようにする方法
当たり前だがこれができないと使えない。
newのアクションに
@profile = Profile.find_or_create_by(:user_id => current_user.id)
これを記載すれば良い。
####find_or_create_byについて
[https://railsdoc.com/page/find_or_create_by)
はじめの1件を取得しなければ作成する。
###アクション後自分の編集画面に飛ぶようにする方法
さらっと流してしまいがちだが何が起こっているのか知っておこう。
redirect_to edit_profile_url(@profile)
これをnewのアクション内に記入する。
####redirect_toについて
参考:リダイレクトの設定
やっていることは編集(edit)へのリダイレクト。
リダイレクトとは、別のURLを呼び出すリクエストを利用者のブラウザから送信してもらうように要求することです。最初に呼び出されたアクションから別のアクションを呼び出しているのではなく、利用者から新しいURLに対してリクエストを出しなおしてもらう点に注意して下さい。
挙動が特殊みたいです。あと、url以外にもアクションとかを設定することもできる。
###エラーメッセージ?を出す挙動について
editのアクションには下記を追加する
if @profile.user_id != current_user.id raise
ActionController::RoutingError.new(“Not authorized”) end
これはログインユーザのidと呼び出したidが違った場合にエラーを通知する処理か。
####raiseと発生させたい例外クラスについて
参考:Ruby on Railsのraiseの使い例外を発生させる方法を現役エンジニアが解説【初心者向け】
raise
そのものはメソッド詳細
制御構造?と呼ばれています。
そしてActionController::RoutingError.new(“Not authorized”)
は組み込みライブラリと呼ばれていて、書くだけでエラー表示する動きをしてくれるようです。
#覚えておくと便利そうなもの
##コマンド
###rails generate scaffold モデル名 カラム名1:データ型1 カラム名2:データ型2:scaffoldの作成コマンド
##メソッド
###before_action :authenticate_user!:コントローラに設定して、ログイン済ユーザーのみにアクセスを許可する
###@profile = Profile.find_or_create_by(:user_id => current_user.id):newアクションに記入して1ユーザーにつき、1profileしか作れないようにする
###redirect_to:コントローラーのアクション内で自動的にページに切り替える
###raise 発生させたい例外のクラス.new("エラーメッセージ"):プログラムの中で意図的に例外(エラー)を発生させる