20201018_アウトプット(モデル深堀り)
学んだこと 7時間半
モデル深堀り
モデルは①Active Recordと②Active Modelを上手に組み合わせてデータベースの調整役として成り立っている。
Active Recordとは
MVCで言うところのM、つまりモデルに相当するものであり、ビジネスデータとビジネスロジックを表すシステムの階層です。データベースに恒久的に保存される必要のあるビジネスオブジェクトの作成と利用を円滑に行なえるようにします。(Railsガイドより)
簡単にいうと、create
・update
・destroy
など、コードに書いた裏側でMVCの流れを実現するために動いてくれている根幹部分のこと。
(補足)ビジネスロジックとはなんぞや:「システム固有の処理」と読み替えるとわかりやすい。システムにおける実際のお仕事部分のこと。また「ビジネスロジックを分けて書こう」の本質は、システムの中で「使い回しできるところとできないところ」「変更がある時に見る必要があるところとないところ」を明確に分けておこうという意味。
(こちらを参考にしました。クスッと笑えて分かりやすくいつもお世話になってます。)
Active Modelとは
Active Modelは多くのモジュールを含むライブラリ(Railsガイドより)
モデル部分に関して、様々なアプリケーションで使えるように便利な機能をカタマリにしたもの。
よく使うActive Model 3選
Callbacksモジュール
処理を任意のタイミングで実行できるようになる。Validationsモジュール
データ保存時に設定した条件を満たしているか検証できる。Serialization(シリアライゼーション)モジュール
データベースに保存されているレコードからJSONを使ってビューに描画する際、あらかじめ描画するものを設定できる。
(例えば、データには作成日時・作成者・画像・テキストが入っているけれど、ビューに反映させる時は画像・テキストだけにしたい等)
使うにはattributes(属性)
というメソッドを定義するよ。
コールバックの補足
ActiveModel::Callbacks(モデルのモジュールの方)は、Active Recordスタイルのコールバックを提供されている。
Active Recordスタイルのコールバックとは、オブジェクト指向を活かして、「これの次にこれを処理する」「これがこうなったらこうする」等、任意のタイミングで行う処理を設定できること。例えば、外部APIを読み込んだ後にこの処理をする、この関数の次にこの関数をする、この処理に失敗したらこちらの処理をする、など。
Formオブジェクト
Formオブジェクトとは、フォームに関する処理を切り出す仕組みのこと。
主に①複数のモデルに関連するデータを一度に更新するフォームを作成する場合。②モデルの存在しないデータを更新する場合。の2つに使う。
複数モデルを一度に更新するとは、例えば商品を購入するアプリケーションがあったとする。お客様が必要な商品を選択し、お客様情報を入力し、「購入」ボタンを押すと、「商品モデル」ではマイナス1となり、「お客様情報モデル」ではプラス1になったとする。その2つのモデルは同じタイミングで行われるので、処理が被っている部分を、フォームオブジェクトに切り出して、切り取られた側はフォームのクラス名を呼び出して使用できる、という仕組み。
モデルの存在しないデータを更新する場合とは、アクティブハッシュのことを指すのか、モデルに関連した親モデル・子モデル・孫モデルなどを指すのかわからなくなってしまったので、最終課題のところでカリキュラムを学びながら理解を深めたい。
積み残し(復習したいこと)
感想
- メンターさんが一歩一歩着実にこのまま行ってほしいです!!応援してます!!と励ましてくれて本当に嬉しかった。よし、頑張ろう。