New-Village

月間ブログ。だいたい1カ月に1回は更新しているようです。

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の挙動

色々説明してくれているんだけど、詳細なところがさっぱり理解できない。 流れは、以下の通り。

  1. config/routes.rb がコントローラーにリダイレクトする
  2. 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)。