この記事は、「Ruby onRails」でブログアプリをつくるシリーズの続きです。このシリーズでは、「RAILS GUIDE」を参考にしながら、行った作業を記録しています。前回の記事は、こちらです。
ルートについて勉強しました。今回は、モデルについて勉強していきます。
「モデル」の生成
「Rails Guides」によれば、「モデル」とは以下のようなことらしい。
モデルは、データを表すために使用されているRubyのクラスです。さらに、モデルはActiveRecordと呼ばれるRailsの機能を介してアプリケーションのデータベースと対話できます 。
Rails Guides
つまり、データベースとのやりとりを行うクラスという意味だと思います。
モデルを定義するには、モデルジェネレーターを使います。
rails generate model クラス名
これを実行すると、ファイルがいくつか作られます。
「マイグレーションファイル」の中身
「マイグレーションファイル」は、データベースを生成する際の設計図のこと。
データベースを操作するには、SQLを実行する必要があるが、Railsでは「マイグレーション」という仕組みがあるため、Ruby上で操作をすることができる。
マイグレーションファイルを実行し、データベースに反映させるためのコマンド
bin/rails db:migrate
これを実行すると以下のようにテーブルが作成されたことを表すテキストが出力される。
== 20210915061245 CreateArticles: migrating ===================================
-- create_table(:articles)
-> 0.0012s
== 20210915061245 CreateArticles: migrated (0.0013s) ==========================
コンソールを使ってみる
コンソールを起動して、newメソッドでモデルを生成します。
article = Article.new(title: "Hello Rails", body: "I am on Rails!")
saveして、articleオブジェクトを見ると次のようなテキストが返ってきました。
#<Article:0x0000000110363b78
id: 1,
title: "Hello Rails",
body: "I am on Rails!",
そして、findメソッドを使ってデータベースから記事を取得します。
irb> Article.find(1)
そうすると、1のプライマリキーに入っているデータが取得できます。
id: 1,
title: "Hello Rails",
body: "I am on Rails!",
allメソッドを実行すれば全ての記事を取得することができます。
記事のリストを表示する
記事の一覧を表示させるように、「app/controllers/articles_controller.rb」のindexアクションを変更します。
class ArticlesController < ApplicationController
def index
@articles = Article.all
end
end
「app/views/articles/index.html.erb」を開いて、以下のように書き換えます。
<h1>Articles</h1>
<ul>
<% @articles.each do |article| %>
<li>
<%= article.title %>
</li>
<% end %>
</ul>
上のコードは、HTMLとERBが組み合わさっています。
ERBは、HTMLの中にRubyスクリプトを埋め込むためのライブラリのこと。
- <% ~ %>は出力がいらないコード
- <%= ~ %>は結果を出力する
そして、「http://localhost:3000/」にアクセスすると、下記のような結果になりました。
今回はここまで、次回も続きを行っていきます。今までの「Ruby onRails」でブログアプリをつくるシリーズはこちらから見られます。
このシリーズをやり始める前に、私は「ウェブデザイン技能検定3級」を取得しました。プログラミングの経験やウェブ業界での経験なしの状態から独学で勉強し、合格することができました。
その時に行った勉強方法をまとめているので、検定を受けてみようと考えている方の参考にしていただけたらと思います。
実感として「ウェブデザイン技能検定3級」は、対策の方法を間違えずにきちんとやれば、未経験でも合格できる資格だと思います。合格すれば国家資格保有者になれるので、興味のあるかたはぜひ、読んでみてください。