201013アウトプット 9日目
TECHCAMP9日目
【目標】
自分のしたいことのために挑戦していることを問い直す。
今までの学習方法を見直す
【復習事項】
○アソシエーションについて
目的 モデル同士を関連づけるための方法
処理したい情報が増えると複雑化する(モデルが増える)ので、アソシエーションを使用する
方法 モデルに記載する
・has manyメソッド (ユーザー→ポスト 一人の投稿者が複数の投稿をする)
・belongs_toメソッド(ポスト →ユーザー 一つの投稿は一人がしたもの)
※実際は各々のモデルが、モデルに対して記載するので
○N+1問題
問題 ループ処理の都度SQLを発行し、パフォーマンスが低下してしまう問題
例え 買い物する際に、1点1点お会計をしてしまうようなことが起きている
何故 一度目にモデルの取得して(+1)、それから各モデルを読み込む(N回)
対応 includesメソッド: 一度のアクセスでまとめて情報を取得できる
モデル分なので(N回)で済むことができる。
○投稿者本人のみに編集・削除を許可するために
目的 他のユーザーから勝手に編集・削除を防ぐ
誰彼構わず編集・削除ボタンが表示されている状態だから
方法 if文を使用する
ログイン 且 ログイン中のユーザーID == 投稿したIDが同じか確認する
同じであれば編集・削除ボタンが表示されるようにする
○部分テンプレート
目的 複数ページで利用する表示の一部をまとめる
繰り返し使用するコードを再利用して、ページの量を減らす
方法 _○○.html.erbファイル を新規作成して同じページはまとめる
○ネスト(入子構造)の利用
目的 ネスト利用でモデル同士を結びつけ共有しid情報が送りやすくする
id情報を共有し利用する
方法 ルーティングにアソシエーション定義
親(Do)を作り、その子を指定します(~end)
【今日を振り返り】
テキストを確認しながら読み進めると、途中手を動かして記載することがある。
プログラミングを書くことに慣れることも重要だが、ペースが途切れる。
思考が中断してしまい、全体の工程が複雑にもなっていることもあるので、
プログラミングした後に、何故こうなったのか流れを再度戻らなくてはならない。
全体の流れを読んだ後に、手を動かす時間として方法を変えるようにする。