3
1

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.

【Ruby on Rails】Active Record(アクティブレコード)とは何なのか?ORMとの違い

Posted at

個人用メモです。

Ruby on RailsのActive Record(アクティブレコード)とは何なのかについてのまとめ。公式リンク

#目次

  1. Active Recordとは?
  2. ORMとは?
  3. Active Recordでできること
  4. 命名ルール
  5. DB構造のルール(スキーマ)
  6. Active Record(モデル)の生成
  7. テーブル名の変更方法
  8. 主キーの変更方法
  9. バリデーションの作成
  10. マイグレーション

##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でテーブルを生成するときは一定のルール(スキーマ)に則る。
  1. デフォルトの主キーはカラム名id(型:integer)
  2. 外部キーはテーブル名の単数形_id(itemsテーブルなら、item_id)
  3. 自動生成されるカラム
    4. created_at: 作成時のタイムスタンプ
    5. updated_at: 更新時のタイムスタンプ

##Active Record(モデル)の生成 ApplicationRecordクラスのサブクラスを作成するだけ。
model名.rb
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。

model名.rb
class モデル名 < ApplicationRecord
  self.table_name = "変更後のテーブル名"
end

##主キーの変更方法 テーブル名と同様に主キーもモデルファイルで変更することができる。
model名.rb
class モデル名 < ApplicationRecord
  self.primary_key = "変更後の主キー名"
end

idという名前が使えるのは主キーのみ。他のカラムではサポートされていない。


##バリデーションの作成 モデルファイルには、変更する命名ルールの他に、バリデーションも記述できる。
model名.rb
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を操作するもの。
3
1
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
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?