第2章について
第2章ではscaffoldを使ってユーザーモデルとマイクロポストモデルを作成し、投稿機能、投稿者と投稿の関連付けができるアプリケーションを作成する。
目次
1. scaffoldについて
2. scaffoldの欠点
3. RESTアーキテクチャ
4. 継承
5. 命名規則
6. 関連付け
7. エラー
8. 参考文献
#1 scaffoldについて
Railsには大量の機能を自動生成するscaffold
というコマンドがある。
rails generate scaffold モデル名 カラム:型
というようにコマンドを実行すると、簡単にRESTfulな(HTTPリクエストによって作成、取得、更新、削除の操作を振り分けて行うことができる)アプリケーションを作成することができる。
- モデル
- コントローラ
- ビュー
scaffoldは上記のようなRailsアプリケーションに必要なMVCを構築するためのファイルを自動作成してくれるので、後はrails db:migrate
コマンドでデータベースをマイグレートすることで動くアプリケーションを作成することができる。
#2 scaffoldの欠点
scaffoldは便利ではあるが、以下のような欠点がある。
- データの検証が行われていない(Validationが書かれていない)
- ユーザー認証が行われていない
- テストが書かれていない
- レイアウトやスタイルが整っていない
- コードが難解
特にコードが難解で理解が難しいので、Railsのコマンドを学習するためにも初学者はscaffoldを使うべきではないのかもしれない。
#3 RESTアーキテクチャ
Wikipediaより以下引用。
Representational State Transfer (REST) は、ウェブAPIの定義に使用されるアーキテクチャスタイルであり、同時にウェブのような分散ハイパーメディアシステムのためのソフトウェアアーキテクチャのスタイルのひとつでもある。
簡単に言ってしまえば、RESTfulなスタイルというのはHTTPリクエストメソッド(POST/GET/PATCH/DELETE)によってデータベースの作成/取得/更新/削除操作を行えるということ。
以下の記事がRESTについて分かりやすくまとめていたので参照。
REST入門基礎知識
#4 継承
モデルやコントローラでRubyのコードが書けるのはRailsにおいてMVCのModelの部分を提供するActiveRecordが提供するActiveRecord::baseという基本クラスをApplicationRecordが継承しているから。
app/models/user.rb
class User < ApplicationRecord
...
end
#5 命令規則(単数形?複数形?)
基本的にrails generate
コマンドを実行するとき、モデルを作成するなら先頭大文字で単数形、コントローラを作成するなら複数形にする。
以下参考。
Railsの命名規則【単数形・複数形】
ちなみにユーザーモデルとマイクロポストモデルの関連付けを行う際にhas_manyとbelongs_toをモデルに記載するがその時、has_manyであれば対象のモデルを複数形、belongs_toであれば単数形で記載する。
#6 関連付け
投稿者(User)1人に対してが投稿内容(Micropost)が複数になっている場合において関連付けをすることでUser側からMicropostを操作することができる。関連付けを行うためにはUserの方にはモデルにhas_many :microposts(*複数形であることに注意)
、Micropostの方はモデルにbelongs_to :user
というように記載する。
こうすることで例えば、
@user = User.first
@user.micropost.create
というようなコードでidが1のUserのMicropost(投稿)を新規作成することができる。
#7 エラー
herokuでマイグレートを実行しようとした際、エラーが発生した。原因はアプリケーションのpostgresqlへのアドオンが設定されていなかったから。
下記コマンド実行で接続完了。(おそらくコマンドじゃなくてもherokuのwebページでも設定できる)
heroku addons:create heroku-postgresql
#8 参考文献
【Ruby on Rails】Herokuへデプロイして、heroku run db:migreteにて...
Representational State Transfer
REST入門基礎知識
Railsガイド 2.1命名ルール
Railsの命名規則【単数形・複数形】