Ruby on Rails チュートリアル 実例を使ってRailsを学ぼう / Michael Hartl (マイケル・ハートル) を見ながらやったことを、あとでもう一度できるようにまとめます!!二章!!
第二章の説明
第2章では、Rails アプリケーションの基本的な仕組みを体験してもらうために、新たなプロジェクトを作成します。手っ取り早く動かしたいので、このデモアプリ (demo_app) では、scaffold (コラム 1.2) を使ってコードを自動生成します。
ただし、scaffold で自動生成されたコードは、複雑であまり美しくありません。このため、第2章では、自動生成されたコードを解説するのではなく、生成された URI (ウェブブラウザで言う URL1) がどのように動くのか、ウェブブラウザを使って確かめることに焦点を当てます。
プロジェクト作成 & 設定
プロジェクト作成
$ cd ~/workspace/ruby/rails
$ rails new demo_app
$ cd demo_app
プロジェクト設定
Gemfileを修正
$ subl Gemfile
source 'https://rubygems.org'
ruby '2.0.0'
#ruby-gemset=railstutorial_rails_4_0
gem 'rails', '4.0.0'
group :development do
gem 'sqlite3', '1.3.7'
end
gem 'sass-rails', '4.0.0'
gem 'uglifier', '2.1.1'
gem 'coffee-rails', '4.0.0'
gem 'jquery-rails', '2.2.1'
gem 'turbolinks', '1.1.1'
gem 'jbuilder', '1.0.2'
group :doc do
gem 'sdoc', '0.3.20', require: false
end
group :production do
gem 'pg', '0.15.1'
gem 'rails_12factor', '0.0.2'
end
bundle インストール
$ bundle install --without production
$ bundle update
$ bundle install
Git設定
$ git init
$ git add .
$ git commit -m "Initial commit"
Github設定
$ git remote add origin https://github.com/yujiroarai/demo_app.git
$ git push -u origin master
Usersリソース・Micropostsリソースを作成
$ rails generate scaffold User name:string email:string
$ rails generate scaffold Micropost content:string user_id:integer
$ bundle exec rake db:migrate
# 確認
$ rails s
モデルを修正
マイクロポストをマイクロにする
$ subl app/models/micropost.rb
class Micropost < ActiveRecord::Base
+ validates :content, length: { maximum: 140 }
end
ユーザーとマイクロポストをhas_manyで関連づける
$ subl app/models/user.rb
class User < ActiveRecord::Base
+ has_many :microposts
end
$ subl app/models/micropost.rb
class Micropost < ActiveRecord::Base
+ belongs_to :user
+ validates :content, length: { maximum: 140 }
end
確認
rails consoleでActiveRecordの動きを確認
$ rails console
Loading development environment (Rails 4.0.0)
# 一番最初に取得できるUserを変数first_userに入れる
irb(main):001:0> first_user = User.first
User Load (0.1ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT 1
=> #<User id: 1, name: "Yujiro Arai", email: "[email protected]", created_at: "2013-08-27 12:55:33", updated_at: "2013-08-27 12:55:33">
# first_userに紐づくmicropostsを取り出す
irb(main):002:0> first_user.microposts
Micropost Load (1.3ms) SELECT "microposts".* FROM "microposts" WHERE "microposts"."user_id" = ? [["user_id", 1]]
=> #<ActiveRecord::Associations::CollectionProxy [#<Micropost id: 1, content: "Post!!!", user_id: 1, created_at: "2013-08-27 13:12:12", updated_at: "2013-08-27 13:12:12">, #<Micropost id: 2, content: "POST22!!!", user_id: 1, created_at: "2013-08-27 13:23:09", updated_at: "2013-08-27 13:23:09">]>
デプロイ
# Githubにpush
$ git add .
$ git commit -m "Finish demo app"
$ git push
# herokuにデプロイ
$ heroku create
$ git push heroku master
$ heroku run rake db:migrate