【Ruby on rails】RDBMSとモデルによるテーブル操作

2019年4月15日

モデルによるDB操作

例えばブログなどを書く場合、新規投稿を送信するとデータベースに保存され、過去の投稿はいつでも読むことが出来ます。

これをRuby on railsで実現するために、まずは、データベースへのアクセス、テーブルの作成〜更新、レコードの表示が行われる仕組みを纏めておこうと思います。

※相変わらずProgateレベルの知識しか無いプログラミング初心者が、自分の備忘録として書いています。間違いがあること前提で、今後ブラッシュアップしていく予定の記事です。

本題です。まず、Rails new アプリケーション名で、新規のアプリケーションを作成した場合、SQLiteというRDBMSが自動で用意されます。

そこにテーブル作成をして、挿入、更新、削除、参照といった操作を行っていくわけです。

テーブルの作成

テーブルの作成にはマイグレーションファイルが必要なため、「rails g model モデル名 カラム名:データ型」をターミナルから実行して作成します。

そして引き続き、ターミナルから「rails db:migrate」コマンドを実行する事により、指定した内容でテーブルが作成されます。

この時、作成されたテーブルに対する操作を行うモデルも合わせて作成されますし、テーブル名は入力したモデル名の複数形となります。(モデル名がPostであればテーブル名はPostsとなります。余談ですが、PersonであればPeopleとなるらしいので頭が良いですね)

※マイグレーションファイル→db¥migrate
モデル→app¥modelsにそれぞれ作成される。

テーブルの操作

テーブルの操作とはレコードの追加、更新、削除、参照を指しますが、SQLはモデルを通して発行されます。

レコードの挿入

テーブルに新規レコードを挿入するには、「モデルクラスをnewします

モデルはapplicationrecordクラスを継承しています。インスタンスを作成するときに引数としてカラム名とバリューを渡しても良いし、インスタンス生成後に、カラム名を指定してバリューを突っ込むことも出来るようです。

※この時のレコードの主キーはデフォルトで「ID」というカラムになるようです。

また、その際にapplicationrecordクラスのsaveメソッドを使って、挿入したレコードをコミットします。(モデルクラス.save)

レコードの参照

モデルクラス.allメソッドでまずは全レコードを取得する。

この時に全レコードが配列として取得されるため、特定のカラムのバリューを繰り返し文で表示するなどの使い方が可能です。

また特定のバリューを持ったレコードだけ取得したい場合にはfind_byメソッドを使えば良く、引数としてカラム名とバリューを渡すことで該当のレコードのみが取得できます。

レコードの更新

レコードの更新を行うためには、まずテキストフォームから更新内容をform_tagメソッドで送信します。この時にURLに主キーを持たせておきます。

サーバーサイドでは、受け取った主キーを使ってfind_byメソッドからレコードを取得し、受け取った内容で書き換え、saveメソッドを発行するだけというお手軽さです。

レコードの削除

レコードの削除を行うためにはリンクを作成しますが、link_toメソッドにはmethodオプションを付与し、postを指定します。

ルーティングもDB更新がある場合は、postとしておかねばなりません。

また、リンク先のURLには主キーを持たせておき、サーバーサイドではこれを使って対象のレコードをfind_byメソッドで取得後、destroyメソッドで削除します。

まとめ

こういったDB操作の基礎を覚えておくことで、テキストフォームから渡ってきた情報をサーバーサイドで取得、保存できるようになります。