LoginSignup
0
0

More than 5 years have passed since last update.

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

Posted at

メモ

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 の利用を強制できる
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0