ほげほげパッチ

有る事無い事 徒然なるままに

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

「特定の場所の」 -> 地元の、現地の