Ruby on Rails チュートリアル on Cloud9 の学習録(第二章)
久々に週末満喫。ドライブして温泉行って、ゴルフの練習して etc... .
ようやく人並みな精神状態に回復できそうです。
昨日に引き続き Ruby on Rails チュートリアル 。今回は第二章をやる予定。
第二章 デモアプリケーション
2.1 アプリの計画
アプリを作ったら最初にgemfileを変更して、"bundle install --without production".
Cloud9のRailsは.gitignoreファイルを作ってくれないので、これを作成して編集。
終わったらgitのコミットとプッシュ。
初動マニュアル
# gemfileの編集
# gemfileの適用
$ bundle install --without production
$ bundle update
$ bundle install
# .gitignoreファイルの作成と編集
# ローカルgitの初期化とコミット
$ git init
$ git add .
$ git commit -m "Initial commit"
# リモートgitの登録とプッシュ
$ git remote add origin ssh://git@bitbucket.org/<username>/tutorial_apps.git
$ git push -u origin master
チュートリアルだとbundleは、install --without production, update, installと3回行っているけど、updateと二回目のinstallにはどんな意味があるのだろうか?知っている人がいたら是非コメントください。
git remoteで怒られた
git remote addを実行したら以下のエラーが発生した。
$ git remote add origin ssh://git@bitbucket.org/<username>/tutorial_apps.git
fatal: remote origin already exists.
[github] gitの使いかた - 綾小路龍之介の素人思考 によると、既にリモートレポジトリとして、"origin"が登録されている為らしい。同サイトの「リモートリポジトリの削除」 手順に従って"origin"を削除してから、再度"origin"を登録したところ、問題なくプッシュできるようになった。
2.2Users リソース
scaffoldを実行すると、定義した情報に基づいてファイル(コントローラーとかビューとか)を作成してくれる。だたし、データベースは作ってくれないので、"rake db:migrate" で後からデータベースのスキーマを生成する、という流れ。
ここまで出来たらプレビュー。Cloud9でrailsサーバを動かすには以下のコマンドを実行する必要がある。
rails s -b $IP -p $PORT
2.2.2 MVCの挙動
色々説明してくれているんだけど、詳細なところがさっぱり理解できない。 流れは、以下の通り。
- config/routes.rb がコントローラーにリダイレクトする
- app/controllers/users_controller.rb は、HTTP requestメソッド(GET, POST, PATCH, DELETE)と、URLに応じて、同ファイルに書かれているアクションを実行する。
2.3.2マイクロポストをマイクロにする
データの扱いについては、Modelが行うということらしい。ここでは、app/models/micropost.rb を編集することで、Validation機能を実装している。
class Micropost < ActiveRecord::Base # Micropostデータモデルのレコード
validates :content, length: { maximum: 140 } #入力検証: Contentの長さの最大値は140
end #終わり
2.3.3ユーザーとマイクロポストをhas_manyで関連づける
データモデル同士の関連づけ(JOINみたいなもの?)は、マスタ側とトランザクション側に別々に記述する必要がある。今回の場合、マスタ側となる app/models/user.rb を以下のように書く(関連先のデータモデルは複数形で書く)。
class User < ActiveRecord::Base
has_many :microposts
end
トランザクション側の app/models/micropost.rb は、以下のように書く。
class Micropost < ActiveRecord::Base
belongs_to :user
validates :content, length: { maximum: 140 }
end
2.3.5デモアプリケーションのデプロイ
あれー?ディプロイは Cloud9 + Heroku の手順で問題ないんだけど… rakeできない... rakeの方法は後で調べるとして、とりあえず終わり。
追記:Cloud9からHerokuにrakeする方法を調べました(Cloud9 + Rails + Heroku)。