Ruby on Rails チュートリアル メモ #2

第3章

  • rails new のオプションに --skip-test-unit をつけることで、Test::Unit フレームワークと関連している test ディレクトリを作成しない
  • bundle install --without pruduction オブションは"remembered option"と呼ばれるもので、このオプションを一度実行するとコマンドに保存され、今後実行するときにオプションを追加する必要がない
  • 秘密トークン(secret_token)はハードコードせず、動的に生成する
  • config/initializers/secret_token.rb で秘密トークン作成する
  • .secret キーをリポジトリで公開しないように .gitignore に設定しておく
  • RSpec を使用する
    • rails g rspec:install
    • rspec のテストを使わない場合は、--no-test-framework を使用する
  • キャメルケースを使用してコントローラーを作成すれば、自動的に static_pages_controller.rb が作成される
  • ActiveSupport#underscore メソッドを使用してキャメルケースをスネークケースに変換している
  • コントローラーを作成する rails generate controller FooBars baz quux
  • コントローラーを取り消す rails destroy controller FooBars baz quux
  • DB を1つ前の状態に戻す rake db:rollback
  • DB を最初の状態に戻す rake db:migrate VERSION=0
  • マイグレーションはそれぞれに対してバージョン番号が付与される。VERSION の値を変更することで、指定したバージョンに戻すことができる
  • Rails 4.0 からは PUT メソッドよりも PATCH メソッドの使用が推奨されている
  • RSpec の リクエストspec = 結合テスト
  • RSpec を用いて結合テストを作成する rails generate integration_test static_pages spec/requests ディレクトリに static_pages_spec.rb が生成される
  • capybara を使用する場合 spec_helper.rb に config.include Capybara::DSL を追加
  • RSpec を使用して TDD で Green になるまで
    • No route matches [GET] "/static_pages/about" routes.rb にルート追加
    • The action 'about' could not be found for StaticPagesController StaticPages コントローラーに about メソッド追加
    • Missing template static_pages/about app/views/static_pagesディレクトリの中にabout.html.erb 追加
  • have_title メソッドは引数で与えられた内容に完全一致する必要はなく、部分一致でもよい
  • 「重複してはならない」 = Don't Repeat Yourself, DRY
  • 埋め込み Ruby = Embedded Ruby
  • <% provide(:title, 'Home') %>
    • :title ラベルに 'Home' 文字列を関連付ける
  • <% ... %>
    • 中に書かれた Ruby のコードを実行するだけで出力なし
  • <%= ... %>
    • 中に書かれた Ruby のコードを実行して、結果をテンプレートに挿入する
  • yield 関数を使用することで、結果をテンプレートに挿入する
  • application.html.erb = 共通の構造をまとめるレイアウトファイル
  • application.html.erb に記述されている <%= yield %> は各ページの内容をレイアウトに挿入する
  • <%= csrf_meta_tags %> csrf_meta_tags メソッドは CSRF を防ぐために使われる
    • HTML に追加されたコード
    • <meta content="authenticity_token" name="csrf-param">
    • <meta content="*****" name="csrf-token">
  • Rspec の let 関数は引数のシンボルと同名の変数にブロックの評価値を格納する