0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

学び直し Part2 MVC、scaffold

Last updated at Posted at 2020-12-04

今日の教科書
神戸プログラミングアカデミーチュートリアル

#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("エラーメッセージ"):プログラムの中で意図的に例外(エラー)を発生させる

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?