Head First Rails

Head First Rails ―頭とからだで覚えるRailsの基本

Head First Rails ―頭とからだで覚えるRailsの基本

読んだ。手を動かしながら読み進める初心者向け教材としては非常にわかりやすいと思った。この本に書いてある図って、たぶん自分で本読みながら何かやるときに実際に描く図で、とても直観的。とはいえ、事前にある程度 ruby の知識があった方がいいのは間違いなかろう。せめてインスタンス変数とローカル変数の違いとか、イテレータの書き方くらいはわかってないとしんどい。事前に
初めてのRuby

初めてのRuby

を読んでいたのだけど、この本も必要最小限のエッセンスに絞ってあってわかりやすい。なんといっても薄いのがいいよね。200ページ弱くらいしかない。

以下まとめ。最後の方(Ajax〜)は本当にやるならもうちょっと勉強しないといけないかな、という気はするけど、どういうものかという概略つかむことはできる。

はじめに/注意事項

lambda02:~# gem install rubygems-update
Successfully installed rubygems-update-1.3.6
1 gem installed
Installing ri documentation for rubygems-update-1.3.6...
Installing RDoc documentation for rubygems-update-1.3.6...
Could not find main page README
Could not find main page README
Could not find main page README
Could not find main page README
lambda02:~#
lambda02:~# update_rubygems
RubyGems 1.3.6 installed

(snip)

lambda02:~# gem -v
1.3.6
    • これをやらないと debian (5.0.4 lenny) では gem ver.1.2.0 で、gem install rails の途中、さんざん*1パッケージをインストールしたあげく、最後にこんなメッセージが出て全部ひっくり返る。結構むなしい。
tereocat@lambda02:~/tickets$ ruby script/server
Missing the Rails 2.3.5 gem. Please `gem install -v=2.3.5 rails`, update your RAILS_GEM_VERSION setting in config/environment.rb for the Rails version you do have installed, or comment out RAILS_GEM_VERSION to use the latest version installed.

1章: さあはじめよう

  • rails
  • ruby script/server [-p ]
  • DRY (Don't Repeat Yourself)
  • 設定よりも規約(CoC: Convenrion over Configuration)
  • コード生成とDB変更
    • ruby script generate scaffold [ ...]
      • は単数形
      • CRUD(Create/Read/Update/Delete) コードの生成
    • rake db:migrate
      • migrationの実行。
    • ruby script/generate migration AddTo :
      • DB変更 migration の生成。テーブルに列を追加する。関連するコードも生成される。
  • MVCアーキテクチャ (Model/View/Control)
    • Model : app/models/.rb
    • Controller : app/controllers/_controller.rb
    • View : app/views

2章: Scaffoldを超えて

  • コードの生成(非Scaffold)
    • ruby script/generate model [ ...]
      • modelクラスの生成。データmigrationの生成。
      • は名詞単数形
    • rake db:migrate
      • マジックカラム: id/created_at/updated_at
    • ruby script/generate controller
      • は名詞複数形
      • controller クラスの生成。
  • View
    • ページテンプレートは自分で作る
    • ERB(Embedded Ruby)
      • Scriptlet
    • レイアウト: app/views/layouts/.html.erb
    • 静的コンテンツ: public/
  • ルート
    • config/routes.rb
    • リクエストとレスポンス/アクション
    • 必ず controller → View の順で呼び出される。
  • 設定よりも規約
    • Model: 名詞単数形
    • Controller/Table: 名詞複数形
  • レコード→オブジェクト(O/Rマップ)
    • .all
    • .find
  • 便利
    • ruby script/dbconsole
      • SQLite3 データベースへの接続
stereocat@lambda02:~/mebay$ ruby script/dbconsole
SQLite version 3.5.9
Enter ".help" for instructions
sqlite> .schema
CREATE TABLE "ads" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "description" text, "price" decimal, "seller_id" integer, "email" varchar(255), "img_url" varchar(255), "created_at" datetime, "updated_at" datetime);
CREATE TABLE "schema_migrations" ("version" varchar(255) NOT NULL);
CREATE UNIQUE INDEX "unique_schema_migrations" ON "schema_migrations" ("version");
sqlite> select * from ads;
1|Typewriter|Old manual typewriter. Many years useful service. Works best with a bottle next to it.|71.(snip)
8|Edsel|Never used aut...|355|755|bing@badabing...|http://pages.google.c...||
37|Diamond|203.4 carats, grade D pear cut diamond. Low price for quick sale. Owner leaving the country.|1000000|5234|pink@panther.com|http://||
sqlite>

3章: 登録、更新、そして削除

  • モデルフォームとアクション
    • form_for
      • フォームオブジェクト
    • フォームから送信されるデータ: params ハッシュ
    • action = controller method + template
      • redirect_to : ページリダイレクト
  • 保存・更新・削除
    • .save
    • .update_attributes
    • .destroy
  • フィルタ
    • before_filter :, :onlly => [:method]

4章: データベースファインダ

  • 非モデルフォーム
    • form_tag
  • ルート
    • rake routes
  • データベースファインダ
    • 属性に対するファインダメソッド
      • .find_all_by()
    • :conditions
      • .all(:conditions => [ = ?], )

5章: データの検証

  • バリデーション
    • バリデーションはモデルに記述する
      • 数値: validate_numericality_of :
      • 必須: validate_presence_of:
    • あるバリデータが失敗しても、モデルオブジェクトはそのほかのバリデータをまとめて実行する。
  • エラーメッセージ
    • form.error_messages
  • 結果の描画
    • render :template =>