はじめに
Ruby on Rails初心者の学習記録Part2です。
Part1では、Rubyの基本文法やRailsを利用したWebアプリケーションの開発環境構築手順及びルーティングについて学びました。
今回は「Getting Started with Rails」の「6 MVC and You」を教材にMVCアーキテクチャのモデルを学んでいきたいと思います。
1. モデルとは
「Getting Started with Rails」によると、モデルとは、データを表現するRubyのクラスです。また、モデルは Active Record と呼ばれるRailsの機能を通して、データベースとやりとりをします。
ということで、実際にモデルを作成して確かめてみます。
2. モデルの作成
以下のコマンドでモデルを作成します。
rails generate model Article title:string body:text
モデル名は単数形にする必要があります。インスタンス化されたモデルは1つのデータレコードを表すためです。
3. マイグレーション
次はデータベースのマイグレーション(DBデータを保持したまま、DBの構造変更を行う)を行います。
先ほど作成したファイルの中にdb/migrate/20230111005407_create_articles.rbというマイグレーションファイルがあります。まずはこの中身を確認します。
class CreateArticles < ActiveRecord::Migration[7.0]
def change
create_table :articles do |t|
t.string :title
t.text :body
t.timestamps
end
end
end
この中のcreate_tableでは、articleテーブルの構成を定義します。デフォルトでは、idカラムをオートインクリメントの主キーとして追加します。
create_table内では、titleとbody2つのカラムが定義されています。これらのカラムは、先ほどのモデル作成時のコマンドに含まれているため、定義されています。
それでは、以下のコマンドでマイグレーションを実行します。
rails db:migration
実行後、テーブルが作成されます。

これによりモデルを利用してテーブルとやりとりができるようになります。
4. モデルを利用したテーブルとのやりとり
Railsの console という機能を利用して少しモデルを触ってみます。
consoleはirb (interactive ruby)のような対話的なコード環境です。
以下のコマンドでconsoleを起動します。
rails console
以下のようなirbプロンプトが表示されます。

このプロンプトで、Articleオブジェクトを初期化します。

この時点では、オブジェクトを初期化しているだけです。データベースには保存されていません。このconsole内でのみ利用できます。保存するためには、saveをコールする必要があります。

上記の出力には、INSERT INTO "articles" ...というクエリも表示されています、つまり、先ほど初期化した記事がテーブルに挿入されたことを示しています。
また、articleオブジェクトを表示させると初期化時に含めていない値も表示されます。id、created_at、updated_at属性が設定されています。これらは保存した際、Railsが実施したものです。

この記事をデータベースから取得したい場合、モデル上でfindをコールし、このidを引数として渡します。

すべての記事を取得したい場合、allをコールします。

これでMVCのモデルの概要については把握できたので、MVCをつなぎあわせてみます。
5. 記事のリスト表示
app/controllers/articles_controller.rbを開き、すべての記事をデータベースから取得できるようindexに追記します。
class ArticlesController < ApplicationController
def index
@articles = Article.all
end
end
コントローラー内のインスタンスの変数は、ビューからもアクセスできます。つまり、app/views/articles/index.html.erb内で@ariclesと記載することにより、参照できます。実際にコードを変更して確認します。
<h1>Articles</h1>
<ul>
<% @articles.each do |article| %>
<li>
Title: <%= article.title %>
</li>
<% end %>
</ul>
<p>Find me in app/views/articles/index.html.erb</p>
上記のコードはHTMLと ERB が混在しています。ERB (Embedded Ruby) とは、ドキュメント内に埋め込まれたRubyのコードを評価するテンプレートシステムのことです。
また、ERBの中にも以下2種類のタグがあります。
・<% %>:囲まれているRubyコードを評価する
・<%= %>:囲まれているRubyコードを評価し、値を返す
そのため、画面上には、<%= article.title %>のみ表示されます。
それでは、http://localhost:3000/ にアクセスして確認します。
4. で挿入した記事のタイトルを表示できました。

一連の流れを図にすると、こんな感じになると思います。
(MVCについては、「RailsにおけるMVC(モデル/ビュー/コントローラ)」の説明がわかりやすかったです。)
最後に
今回はMVCアーキテクチャのモデルについて学びました。教材にした「Getting Started with Rails」は説明が丁寧でとてもわかりやすく、つまることなく進めることができました。
次は「Getting Started with Rails」の「7 CRUDit Where CRUDit Is Due」を教材にして、CRUDを試したいと思います。
最後までお読みいただきありがとうございました!
- Part1
- Part3:CRUD(前編)
- Part4:CRUD(後編)
- [Part5:復習])(https://qiita.com/Yasushi-Mo/items/032b671eed16acdadc6b)
