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

例えばブログなどを書く場合、新規投稿を送信するとデータベースに保存され、過去の投稿はいつでも読むことが出来ます。
これを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操作の基礎を覚えておくことで、テキストフォームから渡ってきた情報をサーバーサイドで取得、保存できるようになります。
ディスカッション
コメント一覧
まだ、コメントがありません