rails モデルとは何か　初心者向け

# 始めに
現在プログラミング初学者でポートフォリオ作成中です。Modelの理解が曖昧なため自分の様な初心者にもわかりやすいようにまとめてみた。

## まずは頑張って公式資料を見てみる

初学者にとって、本当に公式資料は読みにくい。流し読みではまず内容が理解することはできないだろうし、よく読んだとしても独特な言い回しと、見慣れない言葉で説明を受け頭の中はショート寸前となる。そのため、単語ひとつずつ丁寧に噛み砕いていこうと思う（私のために）。

[Ruby on Rails公式ページ](https://railsguides.jp/active_record_basics.html
)

# モデルの説明の前に、、、
### `Active Record`とは、、、
`Active Record`とは
`Active Record`は __簡単__ にデータベースとのやり取りを実現するための道具のこと。
私たちがよく作るモデルに実は組み込まれている。
例えば`Post`モデル (`モデルクラス`)
```rb:Postmodel
class Post < ApplicationRecord
end
```
### よくみると
`Post`は`ApplicationRecord`が持っている __機能__ を引き継いでいる。
そして、さらに`ApplicationRecord`は`ActiveRecord::Base`が持っている __機能__ を引き継いでいる。

### つまり
実は私たちがモデルを作成するということは、`ActiveRecord`の機能を引き継がせ好きな名前を付けているということらしい。
なのでコントローラーにアクションのプログラムを記述する時に使うこれが`ActiveRecord`だった。
```rb:posts_controller
class PostsController < ApplicationController

    def index
    @posts = Post.all（ActiveRecordメソッドでpostsテーブル）
            #(postsテーブルとのやり取りしたいのでPostモデルを指定).
            #（ActiveRecordメソッドでpostsテーブルのレコード全部持ってこい）
    end
 
end
```


## では早速公式資料を読んでみる。

### まずは、、、
英単語を翻訳してイメージを掴んでから読み込んでいく。なんなら難しい日本語も辞書を引いてみる
| 単語| 意味 |
|:-:|:-:|
|Active|_活動的な、活発な、敏活な、積極的な、意欲的な、活気のある、盛んな_|
|Record| _(…を)記録する、書き留める、登録する、(…と)記録する、記録する、_  |
|Model|_模型、モデル、ひな形、(原型の)塑像、原形、(理解などの)模型_|
|相当|_その程度・地位などに応じていること。あてはまること。_|
|business|_事務、業務、仕事、執務_|
|logic|_論理、論法、道理、もっともな考え方、「筋」_|
|恒久的|_ずっと長く変わらないさま。_|
|object|_(知覚できる)物、物体、対象_|
|relational|_関係のある、相関的な_|
|mapping|_地図の作成、ある項目に対して、別の項目を位置づけたり、割り当てたりするルール、規則のこと_|

> Active Recordについて
Active Recordとは、MVCで言うところのM、つまりモデルに相当するものであり、ビジネスデータとビジネスロジックを表すシステムの階層です。Active Recordは、データベースに恒久的に保存される必要のあるビジネスオブジェクトの作成と利用を円滑に行なえるようにします。Active Recordは、ORM（オブジェクト/リレーショナルマッピング）システムに記述されている「Active Recordパターン」を実装したものであり、このパターンと同じ名前が付けられています。

` Active Record`とはプログラムの中で扱う`データ`、その`データ`を処理方法などを表す部分。データベースに予期しない変更などが起こらないように大切に保管される必要のある実物（`user`とか`post`テーブルの横一列部分のこと）の作成と利用をスムーズに行える様にします。`ORM`（他のテーブル同士の関連してる複雑なデータ構造を`オブジェクト指向`の`プログラミング言語`でも扱えるようにする手法のこと）に記述されている「`Active Record`パターン」を実装したもので、同じ名前が付けられている。

ここまで __Active Recordってなんぞや__ という話です。

長いので
1 Active Recordについて
1.1 Active Recordパターン
1.2 O/Rマッピング

は飛ばします。
>1.3 ORMフレームワークとしてのActive Record
Active Recordにはさまざまな機能が搭載されており、その中でも以下のものが特に重要です。
・モデルおよびモデル内のデータを表現する
・モデル同士の関連付け(アソシエーション)を表現する
・関連付けられているモデル間の継承階層を表現する
・データをデータベースで永続化する前にバリデーション(検証)を行なう
・データベースをオブジェクト指向スタイルで操作する

他のテーブル同士のデータをうまい具合に関連させて利用してくれる`Active Record`には様々な機能があり、以下のものが特に重要です。
・データベースとのやり取りを上手く処理してくれるモデルやそのモデルの中のデータを表現する　（user.nameとか）
・複雑な関連付けを簡単に表現してくれる(user.likes.postsとか)
・データベースのデータが予期しない変更などないように、保存する前に本当に保存していいか検証する（varidationのこと）
・複雑なデータのやり取りをオブジェクト指向スタイルで操作できる様にする。User.findとか？

>2 Active RecordにおけるCoC（Convention over Configuration）
他のプログラミング言語やフレームワークでアプリケーションを作成すると、設定のためのコードを大量に書く必要が生じがちです。一般的なORMアプリケーションでは特にこの傾向があります。しかし、Railsで採用されているルール（規約）に従っていれば、Active Recordモデルの作成時に書かなければならない設定用コードは最小限で済みますし、設定用コードが完全に不要になることすらあります。これは「設定がほとんどの場合で共通ならば、その設定をアプリケーションのデフォルトにすべきである」という考えに基づいています。つまり、ユーザーによる明示的な設定が必要となるのは、標準のルールでは足りない場合だけです。

設定より規約（せっていよりきやく、英: convention over configuration; CoC）
開発者の決定すべきことを減少させ、単純にするが柔軟性は失わせない。
他のプログラミング言語でアプリを作成すると、__設定__のためにコードをたくさん書く必要がある。しかしRailsでは規約に従えば設定するためのコードが最小限で済むし、もし書く必要があるとしても標準ルールでは足りない場合だけ。

>命名ルール
Active Recordには、モデルとデータベースのテーブルとのマッピング作成時に従うべきルールがいくつかあります。Railsでは、データベースのテーブル名を探索するときに、モデルのクラス名を複数形にした名前で探索します。つまり、Bookというモデルクラスがある場合、これに対応するデータベースのテーブルは複数形の「books」になります。Railsの複数形化メカニズムは非常に強力で、不規則な語でも複数形/単数形に変換できます(person <-> peopleなど)。モデルのクラス名が2語以上の複合語である場合、Rubyの慣習であるキャメルケース（CamelCaseのように語頭を大文字にしてスペースなしでつなぐ）に従ってください。一方、テーブル名はスネークケース（snake_caseなど、小文字とアンダースコアで構成する）にしなければなりません。以下の例を参照ください。

`Active Record`にはモデル（大元が`ActiveRecord::Base`）とデータベースの`テーブル`との位置付けや割り当てを作成する時に従うべきルールがある。テーブル名を命名する時はモデル名の複数形にする

2022/07/31 執筆中