Ruby on Rails5でモデルの作成とデータベースの利用

今回はRuby on Railsのでモデルの作成とデータベースの利用の部分をやろうと思います。

最終的にはECサイトを作成したいと思います。

 

環境

OS/ミドルウェア バージョン
CentOS 7.2.1511
ruby 2.4.2p198
Rails 5.1.4

 

データベースの設定ファイル

まずは設定ファイルを変更したいと思います。設定内容は自分の環境に設定して下さい。

config/database.yml

[ファイルの編集]

[ファイルの中身]

default: &defaultに記載してある[username、password]しか変更していません。

設定ファイルは「development」「test」「production」の3つのモードに分かれており、開発用、テスト用、本番用、で異なる設定が出来るようになっています。MySQLを利用する場合はユーザー名やパスワードの設定も加わります。

 

データベースの作成

それではまずデータベースを作成します。使用するデータベースの種類はSQLiteやMySQLなどがありますが、Railsアプリケーションからデータベースを作成する場合は、ターミナルを起動しアプリケーションルートに移動してから次のようにコマンドを実行すればデータベースが作成されます。

[データベース作成]

[実行結果]

データベースが作成されたか確認します。ターミナルからデータベースに接続します。

[データベース接続]

[データベース確認]

[実行結果]

[online_shop_development、online_shop_test]が作成されました。

 

モデルの作成

ではモデルを作成します。アプリケーションのルートディレクトリに移動し、次のようにコマンドを実行して下さい。

モデルを作成するとマイグレーションファイルと呼ばれるテーブルの作成や更新のためのファイルも自動的に作成されます。

今回は「user」モデルを作成してみます。

いくつかのファイルが作成されていますが「app/models/user.rb」が作成したモデルに関して記述されたファイルとなります。

それでは作成された「user.rb」ファイルを開いてみます。

[ファイルの中身]

名前が「モデル名」のクラスが定義されます(モデル名の先頭は大文字となります)。

 

タイムゾーンにJSTを使用する方法

config/application.rb

[ファイルの編集]

[ファイルの中身]

これでDBにデータを入れた時に日本の時刻になります。

 

マイグレーションを使ったテーブル作成

モデルを作成した時に「db/migrate/20171214084316_create_users.rb」というファイルも作成されています。これはマイグレーションスクリプトと呼ばれるファイルと呼ばれているものです。

マイグレーションに関して簡単にご説明をしておきます。データベースは既に作成していますが、データを格納するにはテーブルを作成しなければなりません。Railsとは関係無くデータベースの持つ機能を使ってテーブルを作成することはもちろん可能です。ただRailsではテーブルの作成や変更の仕組みとしてマイグレーションと呼ばれる機能が提供されています。

マイグレーションとは、例えばテーブルを作成するのに直接作成するのではなく、テーブルを作成するというスクリプトファイルを作成した上で、そのスクリプトを実行することでテーブルを作成するものです。なぜこのような手間をかけるのかと言えば、(1)テーブルに関して行なった処理を記録し、元に戻したり別の環境で同じ処理を簡単に行なわせることができる、(2)データベースの種類に関係無く同じスクリプトでテーブルを作成できる、といった利点があります。

[ファイルの編集]

[ファイルの中身]

これでマイグレーションの準備はできました。ではアプリケーションルートに移動してから次のようにコマンドを実行してマイグレーションスクリプトを実行して下さい。

[テーブルを作成]

[実行結果]

[テーブルの確認]

「users」と「schema_migrations」「ar_internal_metadata」という3つのテーブルが作成されていることが分かります。「users」はマイグレーションスクリプトを実行して作成したテーブルです。また「schema_migrations」はどのマイグレーションスクリプトまで実行済みなのかを記録するためのテーブルです。「ar_internal_metadata」はenvironmentの情報を保持しているだけみたいです。

詳しくはコチラ参照→Rails5でDBに自動生成されるテーブル、”ar_internal_metadata” とは何なのか

今回作成したマイグレーションスクリプトはテーブルを作成するものですので、スクリプトを実行するとデータベースの中にテーブルが作成されます。

 

テスト用データの作成

モデルの作成とデータベース側で必要なテーブルの作成までは完了しました。簡単なサンプルを作成するために、テーブルにいくつかデータを登録しておきます。

Railsではテーブルにデータを登録する仕組みが用意されています。「db」ディレクトリの中に「seeds.rb」というファイルが作成されています。

[ファイルの編集]

 

・データを1つずつ入れるパターン

[記載方法]

[ファイルの中身]

 

・データを複数入れるパターン

[ファイルの中身]

「user」モデルの「create」メソッドを使いテーブルにデータを追加します。

※ 日本語を使用する場合はファイルの先頭に「# coding: utf-8」を忘れないようにして下さい。

ではアプリケーションルートに移動してから先程記述したスクリプトを実行して下さい。

[テーブルにデータを入れる]

[実行結果]

何も表示されない。エラーが出なければOK。

「users」テーブルにデータが登録されたか確認します。ターミナルからデータベースに接続します。

[データベース接続]

[DB選択]

[データの取得]

[実行結果]

「users」テーブルに5つのデータが登録されました。

これで、テスト用データの作成は終了です。

 

モデルを使ってデータベースのデータを取得

それではモデルを使ってデータベースのデータを取得してみます。まずアクションメソッドを書き換えます。「app/controllers/shopping_controller.rb」ファイルを編集します。

今回は既存の「index」アクションを使います。次のように編集して下さい。

[ファイルの編集]

[ファイルの中身]

「User」モデルの「all」メソッドはテーブルに含まれる全てのデータをモデルクラスのオブジェクトの配列として返します。今回は返された配列を変数「users」に格納しています。

続いてビューを編集します。「app/views/shopping/index.html.erb」ファイルを編集下さい。

[ファイルの編集]

[ファイルの中身]

アクションから渡されてきたモデルクラスのオブジェクトの配列の数だけ順にメールアドレスとパスワードを取得して画面に表示します。

 

動作確認

それではRailsアプリケーションを起動してここまでの動作を確認してみます。ターミナルを起動し、起動させたいアプリケーションのルートディレクトリに移動して下さい。そして「rails server -b 0.0.0.0」と実行して下さい。

[Railsサーバ起動]

ブラウザから次のURLへアクセスして下さい。

「shopping」コントローラの「index」アクションが呼び出され、アクションの中でモデルを使ってデータベースからデータを取得し、最終的に対応するビューが呼び出されて画面に次のように表示されます。

このようにモデルを利用してデータベースからデータを取得し、そのデータを使った結果を利用者のブラウザ上に表示させることができました。

以上でサンプルアプリケーションを使った動作確認は完了です。

 

Ruby on Rails5で環境構築

Ruby on Rails5でソースをGitLab管理

NetBeansでRubyを使う方法

Ruby on Rails5でコントローラーからテンプレートの表示

Ruby on Rails5でモデルの作成とデータベースの利用

Ruby on Rails5で画像に対してリンク設定

Ruby on Rails5で検索フォーム作成

Ruby on Rails5でselect2を使う方法

Ruby on Rails5でBootstrap4デザインにする

Ruby on Rails5で検索フォームと一体型になった検索ボタン作成方法

Ruby on Rails5でFontAwesomeを導入する方法(アイコンが使用可能)

Ruby on Rails5でBootstrap4のナビゲーションバーを使用する方法

Ruby on Rails5でBootstrap4のナビゲーションバーに画像(ロゴ)を設置

Ruby on Rails5でBootstrap4を使用しながらCSSを使用する

Ruby on Rails5でBootstrap4のドロップメニューをホバー表示する方法

Ruby on Rails5でBootstrap4のドロップメニューログインアイコンを作成

Ruby on Rails5でBootstrap4のドロップメニューでカートアイコンを作成

Ruby on Rails5でBootstrap4のドロップメニューで注文履歴を作成

 

投稿者: samancha