N+1問題、部分テンプレート
メソッド関係
N+1問題。
レコードの数 + 1 回、紐付け先のDBを読みに行く、アソシエーション特有の現象。 パフォーマンス低下につながる。
└①全データ取得
└②レコード1に紐づくユーザー情報を取得
└③レコード2に紐づくユーザー情報を取得
└・・・
includes メソッド
N+1問題を解決するメソッド。
Hoge.includes(:user)
└①全データ取得
└②紐付け先の全データ取得。 fin.
(Hoge.allメソッドの代わりも兼ねる)
rails g migration Removeカラム名From削除元テーブル名
テーブルからカラムを削除するためのマイグレーションを作成。
└Addカラム名To追加先テーブル名
の逆
投稿したユーザーである投稿だけを許可
= if current_user.id == tweet.user_id
「〜」かつ「〜」 = &&
<% if user_signed_in? && current_user.id == tweet.user_id %> 〜 <% end %>
_form.html.erbとは?
アンダースコア(_)がファイル名の先頭につくファイルは、部分テンプレート。 共通部分の再利用。
_form.html.erb
のような部分テンプレートは、特定のアクションに対応するのではなく、複数のビューで共通のフォームを表示したい場合に使う。render
メソッドで呼び出す。 (アクションに対応してないから、変だと思った・・・。)partial:
で部分テンプレート名を指定。ディレクトリをまたぐときは、"/users/form"みたいに。locals:
でローカル(部分テンプ内)で使える変数。
└form_withは、変数の状態でeditにもnewにも使える。
=> 共通部分を_form_html.erb
に切り取る。
# new.html.erb <%= render 'form' %> # edit.html.erb <%= render 'form' %> # hogeに@hogeを代入して部分テンプ内で使う。 <%= render partial: "tweet", locals: { hoge: @hoge } %>
orderメソッド
#インスタンス変数 = モデル名.order("並び替えの基準となるカラム名 並び順") @tweets = Tweet.includes(:user).order("created_at DESC")
└並び順 ASC:ascending:昇順、DESC:descending:降順
英単語
define
〜から(de-)境界線(finis)、区切り(finis)を付けること -> 定義する
- undefined:un(否定) -> 未定義
- final:finis(終わり、境界、死) -> 最後
- finance:ラテン語 finis(終わり)が語源。 -> 支払っ(finer)ていること(-ance)、お金に関すること -> 財務、融資
- fine:抑えの利いた(finitus)細かく素晴らしいこと -> 素晴らしい、上質の
- finish:終わり(finis)する(-o) -> 終える
- finite:限定された(finitus) -> 有限
- infinite:in(否定) -> 無限
nil
ほんの少し(hilum)もない(ne-)、無 -> ゼロ、無
- nihil(無)
- nihilism(虚無主義)
- null:何もないこと(nullus)、無、ゼロ -> ゼロ、無価値の
render
ラテン語 re-(後ろへ、戻って、再び)+do(与える) -> の状態にする、を与える、を表す
- surrender:向こう側に(sur-)引き渡す(rendre) -> 明け渡す、譲る
ascend
~へ(ad-)登る(scando)こと -> 登る
- descend:下へ(de) -> 降りる
- scan:ラテン語 scando(這い登る) -> 隅にまで視線を這わせる(scando)こと -> 詳しく調べる。スキャンする。
- scale:はしご(scala)のように一定の間隔で横棒が並んだ目盛り、はしご(scala)を登ること -> [名] 規模、尺度、[自他動] 登る
partial
一部分(pars)の(-alis) -> 部分的な、一部分の、不公平な
- part:部分(pars) -> 部分、部品、役割
local
「特定の場所の」 -> 地元の、現地の