メモ
7.1.1 環境
- 以下の3つ
- development
- test
- production
- 指定方法
- rails console :
rails console production
- rails server :
rails server --environment production
- マイグレーション :
rails db:migrate RAILS_ENV=production
- rails console :
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
) をひとつ作り、それを使うのが慣習-
require
やpermit
は、正常だった場合は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 の利用を強制できる