見出し画像

プログラミング備忘録【Rails編①】

webアプリケーション作成における基礎中の基礎であり
初学者がまず躓くポイントであるMVCの備忘録です。
もちろん僕も躓きました。
何が理解しにくいかというと
関係性が理解にしくい!
これに尽きるかと思います。

例えば以下のようなエラーが出た時にどこを確認したら良いのかわからない
一概にここが悪い!とは言えませんが、MVCの流れを理解することにより
見る箇所を絞り、早期解決に繋がります。

スクリーンショット 2020-06-11 8.12.18

M(モデル)の役割

テーブルの設計図ですね。

$ rails g model post

このコマンドをターミナルで入力すると、テーブルの設計図である
マイグレーションファイルが作成されます。

スクリーンショット 2020-06-11 8.18.43

そしてこのマイグレーションファイルを編集して
t.string:型の指定
:first_name:カラム名(テーブルの項目)
null: false:オプションの指定(空白では許可しません)

スクリーンショット 2020-06-11 8.20.07

$ rails db:migrate

このコマンドを実行することにより、テーブルが作成され
データを格納できるようになります。

同時にmodelフォルダにpostモデルが作成されます。
このファイルにはアソシエーションを定義します。

アソシエーションとは
テーブル間の関係性を定義すること
1対多(has_many)なのか1対1(belongs_to)なのかですね。

V(ビュー)の役割

表示したいページ。それがviewですね。
作成場所にさえ気をつければ
ここに関してはあまり難しくはないと思います。
コントローラーに定義されたアクション名+html.erbにすることで
そのアクションが呼ばれた時にビューを呼び出すことができます。

例えばpostコントローラーを作成したとします。
indexアクションを定義して、パスを通すと
viewsフォルダ→postsフォルダのindex.html.erbが呼ばれます。
アクション名と別名では読み込むことができません

C(コントローラー)の役割

ゲームのコントローラーと同じと考えると判りやすいかと思います。
Aボタンを押すと攻撃する  :Aアクションはindex(一覧)を表示する
Bボタンを押すとジャンプする:Bアクションはnew(投稿)する
コントローラーがなければグラフィックがいくら綺麗でも
素晴らしいシステムが構築してあっても操作できません。
この『操作』をするのがコントローラーの役割です。

作成方法はmodel の時と同じです。

$ rails g controller posts

ここで大事なのが複数形にしているところです。
単数形でも機能しますが、アプリケーション全体で一貫したURLとパスヘルパーの使用状況を維持できると言うメリットがあるので
理由がなければ複数形の方がいいです。

../controllers/posts_controller.rb

def index
end

コントローラーファイルには上記のようにアクション名をdef~endで囲みます。今回の記述ではviews/posts/index.html.erbファイルを呼び出すように
なっています。
この中にテーブル情報を取り出す処理を書いてあげれば
index.html.erbにpostテーブルの投稿内容などを表示することができるようになります。

忘れてはいけないルートパス

ここまで出来たらTOPページに遷移できると思いきや
もう一つ大事なことが残っています。
routes.rbにパスを通してあげることです
ここ僕はよく忘れて、ルーティングエラーが出ます。

config/routes.rb

resources :posts, only: :index

この記述をすることにより、今まで設定した拠点を繋ぐ道が出来ました。
これでposts/index.html.erbファイルを開くことができるようになるはずです。確認方法はターミナルで

$ rails routes

これでどのようにパスが通っているか確認できます。

スクリーンショット 2020-06-11 10.19.06

Prefix:パス
URI Pattarn:localhost:3000の後につけるとそのページが表示される
Controller#Action:どのコントローラーのどのアクションで何が実行されるのか記載されている。(postsコントローラーのindexアクションでトップページが表示される)

これがMVCの簡単な流れだと思います。
テーブルから情報引っ張ってくるとまた表きが追加されたり
だんだんと複雑になってきますが、正常な流れを理解することにより
異常(エラー)が明確になり、デバックが早くなると思います。

ここまで読んでいただきありがとうございました。
日々学習し、もっと判りやすい説明ができるよう
努力していきます。

この記事が気に入ったらサポートをしてみませんか?