Railsチュートリアル

Rails チュートリアル メモ 第7章

メモ

7.1.1 環境

  • 以下の3つ
    • development
    • test
    • production
  • 指定方法
    • rails console : rails console production
    • rails server : rails server --environment production
    • マイグレーション : rails db:migrate RAILS_ENV=production

7.1.2 routes.rb における resources

  • resources :users と書くだけでこんなことになる
    • こんなことになる、ということだけ覚えておけばいいか
   Prefix Verb   URI Pattern               Controller#Action

    users GET    /users(.:format)          users#index
          POST   /users(.:format)          users#create
 new_user GET    /users/new(.:format)      users#new
edit_user GET    /users/:id/edit(.:format) users#edit
     user GET    /users/:id(.:format)      users#show
          PATCH  /users/:id(.:format)      users#update
          PUT    /users/:id(.:format)      users#update
          DELETE /users/:id(.:format)      users#destroy
  • メソッド名と同じ名前で erb を用意すれば、それが描画に利用される

7.1.2 params

  • 下記のような各種リクエストパラメータは params というハッシュから参照できる
    • REST URI に含められたパラメータ
    • クエリストリング

7.1.3 debugger

  • 最強か

7.2.1 form_for

  • form_for ヘルパーを使えば、モデルのためのフォームが簡単に作れる
    • コントローラー側でモデルのまっさらなインスタンスを作ってビューに渡す
      • そのとき、コントローラー側で属性をセットしておくと、それがプレースホルダーになる
    • 作られるフォームは自動的に action="/users" method="post" となる
    • CSRF 対策までしてくれる

7.3.2 Strong Paramater

  • 上記の form_for を使うと、ユーザーの入力が params の1要素としてハッシュで追加される
    • params 自体がハッシュなので、正確には「ハッシュのハッシュ」になる
  • Rails のモデルは、更新時に属性をハッシュで渡して一発で初期化することができる
    • これをマスアサインメントと呼ぶ
    • 例 : u = User.new(name: "foo", password: "bar")
  • しかし、マスアサインメントを使うと、悪意あるユーザーが不正なパラメータを送りつけてきたときに対処ができない
  • それを防ぐために、「 params に存在していい要素」を宣言することができる
  • その仕組みを Strong Parameter という
    • この役割を担うのは コントローラ層
    • かつてはモデル層で attr_accessible を使ってやっていたらしいが、github が脆弱性を突かれて、その手法には問題があるとわかったらしい?
  • 実際には、専用のプライベートメソッド (user_params) をひとつ作り、それを使うのが慣習
    • requirepermit は、正常だった場合は self を返す(つまり params を返す)ので、このプライベートメソッドの呼び出しをマスアサインメントの引数にすればよい
    • 実装の解説はここがわかりやすい

7.3.3 app/views/share

  • アプリ全体で使う partial は app/views/share に入れるのが慣習
  • partial なのでファイル名を _ で始める(復習)
    • でも render で呼び出すときは _ は要らない。難しいな

7.3.3 pluralize

  • 引数の数値に応じて、英単語を複数形に変えたり変えなかったりするやつ

7.3.4 assert_no_difference

  • すげー

7.4.1 redirect_to

  • 以下の2つは同じ
    • redirect_to @user
    • redirect_to user_url(@user)
  • 後者の方が覚える負担が少なくていいかな
  • リダイレクトなので _path ではなく _url を使っている(復習)

7.4.2 flash

  • 割愛

7.4.3 DB の初期化

rails db:migrate:reset

7.4.4 content_tag ヘルパー

  • ruby の世界だけで html を記述できるようになるので、erb が簡潔になる効果がある

7.5.1 SSL の使用

  • config/environments 配下に、環境ごとの設定がいろいろ書いてある
  • 本番環境用の設定で、SSL の利用を強制できる