1
2

More than 3 years have passed since last update.

Ruby on Railsでデータベースを扱う

Last updated at Posted at 2020-07-12

プログラミングの勉強日記

2020年7月13日 Progate Lv.186
Ruby on RailsⅡ

データベースとは

 テキストや数値などのデータを保存するためのツール。データベースは表でデータを管理している。表のことをテーブル、縦の列のことをカラム、横の列のことをレコードという。必要に応じて複数のテーブルを作成できる。

データベースの用意

 マイグレーションファイルと呼ばれるデータベースに変更を指示するためのファイルを作成する。rails g model モデル名 カラム名:型で作成できる。モデル名は必ず最初を大文字にして、単数形にする。なので、postsテーブルを作成するが、この場合単数形にする。モデルについては下で記述する。
 マイグレーションファイルはdb/migrateフォルダの下に作成される。

ターミナル
$ rails generate model Post content:text

 これを実行すると、app/modelsフォルダにモデルが定義されたファイルと、db/migrateフォルダにマイグレーションファイルの2つのファイルが生成される。

データベースに変更を反映する

 rails db:migrateコマンドを実行すると、データベースに変更を反映できる。テーブル作成時にはidcreated_atupdated_atが自動生成される。データベースに反映されていないマイグレーションファイルが存在する状態でページにアクセスすると、マイグレーションエラーが発生する。なので、マイグレーションファイルを作成した場合は必ずこのコマンドを実行する。

Postモデル

 モデルはテーブルを操作するための特殊なクラスである。rails generate modelコマンドでpostsテーブルを操作するためにPostモデルが定義されたファイルpost.rbapp/modelsフォルダの中に作成されている。ファイルの中にはApplicationRecordクラスを継承するPostクラスが定義されている。ApplicationRecordを継承したクラスをモデルという。

models/post.rb
class Post < ApplicationRecord
end

rails console

 ターミナルでrails consoleと入力し、実行(Enter)するとコンソールを起動できる。コンソールはquitを実行すると終了する。コンソールでは変数を定義することができ、quitでコンソールを終了するまで使い続けられる。

ターミナル
$ rails console
>text="Hello"
=>"Hello"
>text+"World"
=>"HelloWorld"
>quit

テーブルにデータを作成

 postsテーブルにデータを追加するためには、newメソッドでPostモデルのインスタンスを作成し、postsテーブルに保存する。
 1. rails consoleを使ってPostモデルからPostインスタンスを作成する。インスタンスを作成するにはnewメソッドを使う。
 2. 作成したPostインスタンスをpostsテーブルに保存するためにはsaveメソッドを使う。(saveメソッドを使えるのはPostモデルがApplicatuonRecordを継承しているから)

ターミナル
$ rails console
>post=Post.new(content:"HelloWorld")
>post.save

テーブルからデータを取り出す

 Post.firstとすることでpostsの最初のデータを取得することができる。
 post.contentとすることで、Post.firstで取得したデータから投稿内容を取得できる。

ターミナル
$ rails console
> post=Post.first
> post.content
=> "今日から…"

 テーブルに保存されているすべてのデータを取得するにはPost.allを使う。テーブルにあるすべてのデータが配列で取得できる。投稿の配列から1つのデータを取り出すためには、Post.all[0]のようにインデックス番号で1つの要素を取得する。Post.all[0].contentとすることで投稿内容を取得する。

ターミナル
$ rails console
> posts=Post.all[0].content
=> "今日から…"

データベースの表示

 ビューで使う変数はアクションで定義するのが一般的である。通常はアクションで定義した変数はビューで使えないが、変数名を@から始めることで特殊な変数となり、ビューファイルでも使うことができる。

 postsコントローラのindexアクション内の@postsにPost.allで取得したデータを代入する。ビューでは@postsに代入されている配列のデータを1つずつ変数postに代入して投稿内容を繰り返し表示させる。

post_controller.rb
def index
  @posts=Post.all
end
osts/index.html.erb
<% @posts.each do |post| %>
  <div class="post-index-item>
    <%= post.content %>
  </div>
<% end %>
1
2
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
2