今日の教科書
神戸プログラミングアカデミーチュートリアル
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”)
は組み込みライブラリと呼ばれていて、書くだけでエラー表示する動きをしてくれるようです。