【Rails入門】モデル(model)の基本まとめ

Ruby on Rails(以降、Rails)は、MVC呼ばれるデザインパターンを採用したフレームワークです。

この記事では、そのMVCのうちのM、すなわちModelについて解説します。

  • そもそもMVCとは
  • そしてModelとは
  • どのようにしてModelを作成するか

といった基本的な内容から、

  • データの取り出し方
  • データの更新方法
  • データの新規作成

などの実務的な内容に関しても解説していきます。Modelの基礎を正しく理解し、スムーズに応用できるように、わかりやすく解説します!

Modelとは

Modelは、MVCを構成するコンポーネントの1つです。MVCは、以下の3つのコンポーネント(構成要素)から構成されるデザインパターンです。

コンポーネント(構成要素)説明備考
Model(モデル)データベースを取り扱うデータベースへの格納方法は、Modelに隠ぺいする
View(ビュー)画面表示を取り扱う表示方法は、Viewに隠ぺいする
Controller(コントローラー)(ユーザーの入力を受けて)ModelとViewにアレコレ指示するデータベースへの格納方法や表示方法は知らない

Railsでは、Rails標準のライブラリであるActive Recordを利用して、Modelを実装します。つまり、Railsでは、Active Recordを使って、データベース(テーブル)にデータを格納したり更新したり、データベース(テーブル)に格納したデータを検索したりできるということです。

Modelの使い方を理解するために環境を準備しよう!

まずはRailsの開発環境を構築しよう

Modelの使い方を理解するために、Railsの開発環境を構築しておきましょう。Railsの開発環境の構築方法は、以下の記事で解説していますので、ぜひご覧ください。

初心者でもかんたん!Ruby on Rails の開発環境の構築手順(Mac/Windows 両対応)
更新日 : 2019年8月9日

この記事では、app/samurai/model-demoディレクトリを作成して開発環境を構築した場合を例に、説明を続けます。

hirb gemとhirb-unicode gemをインストールしよう

この後、Modelの使い方を確認する際、Railsコンソールを使用します。Railsコンソールで出力したデータの見栄えを良くにするために、以下の2つのgemをインストールしましょう。

gem説明
hirb gem出力結果を表形式で出力する
hirb-unicode gemマルチバイト文字の表示を補正する

(1)Gemfileの最終行に以下の内容を追記します。

(2)以下のコマンドを入力します。

これで、hirb gemとhirb-unicode gemがインストールされました。

Modelを作成する

RailsでModelを作成するには、以下の2つを作成します。

  • モデルクラス(Active Record)
  • データベース(テーブル)

この記事では、movieというModelと、directorというModelを作成します。movie Modelでは、以下の情報を格納します。

カラムデータ型説明
titlestring映画のタイトル
publisheddate映画が公開された日付
salesbigint映画の興行収入(単位:ドル)
rankinteger興行収入順位
directorreferences
(belongs_toでも同じ)
監督(外部キー)

director Modelでは、以下の情報を格納します。

カラムデータ型説明
namestring監督名

Railsで上記のようなModelを簡単に作成するために、bin/rails generate modelコマンドと、bin/rails db:migrateコマンドが用意されています。まずは、bin/rails generate modelコマンドの基本構文を説明します。

パラメータ説明
name生成するモデルクラスの名前
fieldフィールド名
typeデータの型など
代表的な型は以下のとおりです。
・string
・date
・integer
・bigint
・references / belongs_to

基本構文をチラ見したら、bin/rails generate modelコマンドの使用例を見てみましょう。

(1)「端末」を起動して、以下のコマンドを1行ずつ順番に入力します。

実行結果:

実行結果にあるとおり、4つのファイルが作成されていますが、この記事では、以下の3つのファイルに注目します。

ファイル名ファイルの種類説明
db/migrate/
20180705061405_create_movies.rb
マイグレーションファイルデータベース(テーブル)の作成方法を記述したファイルです。
ファイル名の先頭の数字部分は、コマンドを実行した日時により異なります。
app/models/movie.rbモデルクラスファイルモデルクラスを定義するファイルです。
test/fixtures/movies.ymlフィクスチャファイルデータベース(テーブル)に格納するデータを記述するファイルです。

各ファイルの内容は以下のとおりです。マイグレーションファイル(db/migrate/20180705061405_create_movies.rb)

モデルクラス(app/models/movie.rb)

フィクスチャファイル(test/fixtures/movies.yml)

続けて、director(外部キー)が参照するテーブルも作成しましょう。

(2)以下のコマンドを入力します。

実行結果:

movieと同様、4つのファイルが作成されます。

次に、作成されたマイグレーションファイルを元に、データベース(movieテーブル、directorテーブル)を作成します。

(2)以下のコマンドを入力します。

実行結果:

以上で、モデルクラス(Active Record)とデータベース(movieテーブル、directorテーブル)が作成され、すなわちmovie Modelとdirector Modelが作成されたことになります。

マイグレーションファイルを作成しない方法について(–skip-migration)

ちなみに、マイグレーションファイルを作成せずに、それ以外のファイルだけを作成する場合は、以下のように–skip-migrationを指定します。

実行結果:

上で紹介した実行結果と比べると、マイグレーションファイルが作成されていないことがわかりますね。

Modelに関する命名規約について

Modelに関連する命名規約をまとめました。頭文字の大文字/小文字と、単数形/複数形の違いを覚えておくとスムーズに作業を進められるでしょう。

ファイルの種類命名規約
モデルクラスファイル名頭文字が小文字、単数形movie.rb
モデルクラス名頭文字が大文字、単数形Movie
テーブル名頭文字が小文字、複数形movies

モデルクラスをカスタマイズする

bin/rails generate modelコマンドで作成されるモデルクラスは、極めて基本的な内容しか書かれていません。

モデルクラスには、データベースを取り扱う(データベースへの格納方法は、Modelに隠ぺいする)という役割がありますので、その役割から逸脱しないようにプログラムを書いていきましょう。ここでは、モデルクラスでよく使う機能を紹介します。

検証機能を付与する(validates)

モデルクラスをカスタマイズして、検証機能を付与できます。検証機能について詳しくは、以下の記事を参考にしてください。

【Rails入門】バリデーション(validations)の使い方まとめ
更新日 : 2018年6月18日

クエリを定義する(scope)

モデルクラスでよく使うクエリを、モデルクラスファイルで定義できます。クエリを定義する方法について詳しくは、以下の記事を参考にしてください。

【Rails入門】scopeの使い方まとめ
更新日 : 2017年7月15日

Modelを削除する

もし間違ったModelを作成してしまった場合は、モデルクラスとテーブルを削除します。

モデルクラスを削除する

モデルクラスを削除するには、以下のコマンドを入力します。

実行結果:

テーブルを削除する

モデルクラスを削除したら、テーブルを削除しましょう。

実行結果:

ここでは、すべてのテーブルを削除しましたが、必要なテーブルがある場合は、以下のコマンドを実行すると良いでしょう。

モデルクラスを利用する

Modelを作成できたところで、Modelを扱ってみましょう。RailsでModelを扱うには、モデルクラスを利用して、テーブルに格納したデータを検索したり更新します。

テストデータを準備する

まずは、テストデータを準備します。この記事では、テーブルへテストデータを格納するために、フィクスチャを利用します。

(1)test/fixtures/movies.ymlを以下のように編集します。

変更前:

変更後:

director:に指定したjcやjjaは、次のtest/fixtures/directors.ymlで指定するラベルに対応しています。

(2)test/fixtures/directors.ymlを以下のように編集します。

変更前:

変更後:

以上がテストデータです。このテストデータをテーブルに格納しましょう。

(3)以下のコマンドを入力します。

テーブルに格納できたことを確認しましょう。

(4)以下のコマンドを1行ずつ順番に入力します。

実行結果:

(5)以下のコマンドを1行ずつ順番に入力します。

実行結果:

無事にテストデータが格納されていますね!

(6)以下のコマンドを入力します。

検索してデータを取り出す

モデルクラスを利用して、テーブルからデータを検索して取り出す方法を紹介します。ここではRailsコンソールを使っていますが、モデルクラスファイルでも同様のコードでデータを検索して取り出せます。

(1)以下のコマンドを入力します。

ここでは、whereメソッドを使って、2001-01-01以降に公開された映画のデータを取り出してみましょう。

(2)以下のコマンドを1行ずつ順番に入力します。

実行結果:

該当するデータが2件取得できていますね。

(3)以下のコマンドを入力します。

データを更新する

次に、テーブルのデータを更新してみましょう。やはりRailsコンソールを使います。

(1)以下のコマンドを入力します。

ここでは、whereメソッドを使って、title(映画のタイトル)が「アバター」のデータを取り出して、rank(興行収入順位)を1にしてみましょう。

(2)以下のコマンドを1行ずつ順番に入力します。

実行結果:

rankの値が「0」から「1」に変更されました。

(3)以下のコマンドを入力します。

データを作成する

最後に、新しいデータを作成してテーブルに追加してみましょう。ここでもRailsコンソールを使います。

(1)以下のコマンドを入力します。

(2)以下のコマンドを1行ずつ順番に入力します。

実行結果:

データベース(テーブル)に保存します。

(3)以下のコマンドを入力します。

実行結果:

新しいデータが追加されていることを確認しましょう。

(4)以下のコマンドを入力します。

実行結果:

データが4つになりましたね!

まとめ

この記事では、Modelの基礎として、Modelの役割を説明しました。また、データの検索や更新を行う方法など、実務的な内容についても説明しました。Modelには、この記事で説明した内容のほかにも様々な役割や使い方があり、学ぶ範囲がとても広いテーマです。

まずは、この記事でまとめたModelの基礎をしっかり理解したうえで、さらに難しい内容に取り組んでみてはいかがでしょうか?もし、Modelの基礎を忘れてしまったら、この記事を思い出してくださいね!

LINEで送る
Pocket

最短でエンジニアを目指すなら侍エンジニア塾

cta_under_bnr

侍エンジニア塾は業界で初めてマンツーマンレッスンを始めたプログラミングスクールです。これまでの指導実績は16,000名を超え、未経験から数多くのエンジニアを輩出しています。

あなたの目的に合わせてカリキュラムを作成し、現役エンジニア講師が専属であなたの学習をサポートするため効率よく学習を進めることができますよ。

無理な勧誘などは一切ありません。まずは無料体験レッスンを受講ください。

無料体験レッスンの詳細はこちら

書いた人

侍テック編集部

侍テック編集部

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説