個人用メモです。
Ruby on RailsのActive Record(アクティブレコード)とは何なのかについてのまとめ。公式リンク
#目次
- Active Recordとは?
- ORMとは?
- Active Recordでできること
- 命名ルール
- DB構造のルール(スキーマ)
- Active Record(モデル)の生成
- テーブル名の変更方法
- 主キーの変更方法
- バリデーションの作成
- マイグレーション
##Active Recordとは? RailsでMVCモデルのM(モデル)に該当する機能のこと。 なので、**Active Record = Model** の認識でOK。
Modelは概念なので、Railsにおいて、Modelの概念を担う機能がActive Recordとなる。
##ORMとは?
Object/Relational Mappingの略。(O/Rマッピングとも呼ばれる)
DBをSQL文で直接操作するのではなく、Modelを介して操作する、この技術をORMと呼ぶ。
ORMの技術を使うことで、DBとModelが接続できる。このDBとの接続処理をRailsではActive Recordと呼ぶ。
###Active Recordでできること
- モデルおよびモデル内のデータを表現する
- モデル同士の関連付け(アソシエーション)を表現する
- 関連付けられているモデル間の継承階層を表現する
- データをデータベースで永続化する前にバリデーション(検証)を行なう
- データベースをオブジェクト指向スタイルで操作する
##Active Recordのルール ModelとDBを関連づけるために、モデル名とテーブル名にルールが存在する。
###命名ルール
RailsではDBのテーブル名を探索するときに、モデルのクラス名を複数形にした名前で探索する。
このため、モデル名は常に、頭文字大文字、単数形、キャメルケースで作成する必要がある。
モデル / クラス | テーブル / スキーマ |
---|---|
Article | articles |
LineItem | line_items |
Person | people |
単数形のモデル名から、該当するテーブル名を検出するのはRailsが自動でやってくれる。
このルールに則り、コントローラを生成するコマンドを実行すると、そのコントローラ名に合わせて、モデルとテーブルも自動生成してくれる。
##DB構造のルール(スキーマ) Railsでテーブルを生成するときは一定のルール(スキーマ)に則る。
- デフォルトの主キーは
カラム名id(型:integer)
- 外部キーは
テーブル名の単数形_id
(itemsテーブルなら、item_id) - 自動生成されるカラム
4. created_at: 作成時のタイムスタンプ
5. updated_at: 更新時のタイムスタンプ
##Active Record(モデル)の生成 ApplicationRecordクラスのサブクラスを作成するだけ。
class モデル名 < ApplicationRecord
end
命名ルールに従って、複数形のテーブル名にマッピングする。
Railsコマンドを使うともっと簡単。必要なファイルも一挙に生成してくれる。
$ bin/rails generate controller <コントローラ名> <アクション名>
▼実例
$ bin/rails generate controller Articles index --skip-routes
Running via Spring preloader in process 31185
create app/controllers/articles_controller.rb
invoke erb
create app/views/articles
create app/views/articles/index.html.erb
invoke test_unit
create test/controllers/articles_controller_test.rb
invoke helper
create app/helpers/articles_helper.rb
invoke test_unit
invoke assets
invoke scss
create app/assets/stylesheets/articles.scss
###ApplicationRecord
ApplicationRecordは有用なメソッドが多数定義されているActiveRecord::Baseを継承している。
##テーブル名の変更方法 デフォルトではDBに生成されるテーブルは命名ルールに則るが、これを変更することも可能。
モデルファイルの中に既述すればOK。
class モデル名 < ApplicationRecord
self.table_name = "変更後のテーブル名"
end
##主キーの変更方法 テーブル名と同様に主キーもモデルファイルで変更することができる。
class モデル名 < ApplicationRecord
self.primary_key = "変更後の主キー名"
end
idという名前が使えるのは主キーのみ。他のカラムではサポートされていない。
##バリデーションの作成 モデルファイルには、変更する命名ルールの他に、バリデーションも記述できる。
class モデル名 < ApplicationRecord
validates: :カラム名, バリデーションルール
end
```
バリデーションルールには、必須にする`presence: true`やemailの形式を指定する`email`, 確認用の`confirmation`や最大文字数・最小文字数を指定など多くのルールが用意されている。
<br>
```rb:バリデーションの例
class Person < ApplicationRecord
validates :name, presence: truem, length: { minimum: 2 }
validates :email, uniqueness: true, on: :account_setup
validates :age, numericality: true, on: :account_setup
end
```
[rails公式 バリデーションルール](https://railsguides.jp/active_record_validations.html)
<br>
##マイグレーション
ModelとDBは常時連携しておらず、変更内容を反映するためにはマイグレーションをする必要がある。
・`bin/rails db:migrate`
一つ戻したいとき(ロールバック)は、`bin/rails db:rollback` を行う。
###マイグレーションファイルの例
generateコマンドでコントローラを生成すれば、マイグレーションファイルも自動生成される。
db/migrate/20210309094422_create_articles.rb
```rb:20210309094422_create_articles.rb
class CreateArticles < ActiveRecord::Migration[6.1]
def change
create_table :articles do |t|
t.string :title
t.text :body
t.timestamps
end
end
end
```
<br>
以上。
Active Recordという名称がでてきたら、Railsのモデルのことと覚えておけばOK。
ORMはモデルでDBを操作する技術のこと。モデルは間接的にDBを操作するもの。