LoginSignup
1
0

More than 1 year has passed since last update.

Ruby on Rails初心者の学習記録 Part2:モデルについて

Last updated at Posted at 2023-01-15

はじめに

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つのデータレコードを表すためです。

実行後、以下のファイルが作成されます。
image.png

3. マイグレーション

次はデータベースのマイグレーション(DBデータを保持したまま、DBの構造変更を行う)を行います。
先ほど作成したファイルの中にdb/migrate/20230111005407_create_articles.rbというマイグレーションファイルがあります。まずはこの中身を確認します。

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内では、titlebody2つのカラムが定義されています。これらのカラムは、先ほどのモデル作成時のコマンドに含まれているため、定義されています。
それでは、以下のコマンドでマイグレーションを実行します。

rails db:migration

実行後、テーブルが作成されます。
image.png
これによりモデルを利用してテーブルとやりとりができるようになります。

4. モデルを利用したテーブルとのやりとり

Railsの console という機能を利用して少しモデルを触ってみます。

consoleはirb (interactive ruby)のような対話的なコード環境です。

以下のコマンドでconsoleを起動します。

rails console

以下のようなirbプロンプトが表示されます。
image.png
このプロンプトで、Articleオブジェクトを初期化します。
image.png
この時点では、オブジェクトを初期化しているだけです。データベースには保存されていません。このconsole内でのみ利用できます。保存するためには、saveをコールする必要があります。
image.png
上記の出力には、INSERT INTO "articles" ...というクエリも表示されています、つまり、先ほど初期化した記事がテーブルに挿入されたことを示しています。
また、articleオブジェクトを表示させると初期化時に含めていない値も表示されます。idcreated_atupdated_at属性が設定されています。これらは保存した際、Railsが実施したものです。
image.png
この記事をデータベースから取得したい場合、モデル上でfindをコールし、このidを引数として渡します。
image.png
すべての記事を取得したい場合、allをコールします。
image.png
これでMVCのモデルの概要については把握できたので、MVCをつなぎあわせてみます。

5. 記事のリスト表示

app/controllers/articles_controller.rbを開き、すべての記事をデータベースから取得できるようindexに追記します。

articles_controller.rb
class ArticlesController < ApplicationController
  def index
    @articles = Article.all
  end
end

コントローラー内のインスタンスの変数は、ビューからもアクセスできます。つまり、app/views/articles/index.html.erb内で@ariclesと記載することにより、参照できます。実際にコードを変更して確認します。

index.html.erb
<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. で挿入した記事のタイトルを表示できました。
image.png
一連の流れを図にすると、こんな感じになると思います。
(MVCについては、「RailsにおけるMVC(モデル/ビュー/コントローラ)」の説明がわかりやすかったです。)

最後に

今回はMVCアーキテクチャのモデルについて学びました。教材にした「Getting Started with Rails」は説明が丁寧でとてもわかりやすく、つまることなく進めることができました。
次は「Getting Started with Rails」7 CRUDit Where CRUDit Is Dueを教材にして、CRUDを試したいと思います。

最後までお読みいただきありがとうございました!

参考

1
0
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
1
0