今日の勉強 0814
しんどいくなって来た。
・railsにおけるアソシエーションとは
モデル間の関連付けに関する概念。例えば、ブログの記事が複数ユーザーで書かれている場合、記事のモデルとユーザーのモデルが存在する。
この状況で、どの記事がどのユーザーによって書かれたかを関連づけるのがアソシエーション。
/モデル同士の親子関係として考える/
ユーザーがそれぞれ複数の記事を持っているのは、当たり前だが「ユーザーは複数の記事を持っている」という状態。
逆に記事から見てみると「記事は誰か一人のユーザーに属している」という状態。
このとき、ユーザーモデルは親となり、記事モデルがモデルが子となるイメージ。これを1:Nの関係というらしい。
・N+1問題
アソシエーションを利用すると、一つのデータを表示するにあたっても複数のDBを経由しなければならない問題から、パフォーマンスの低下につながる恐れがある。これを解決するにはincludeというメソッドを用いる。
・includeメソッド
引数で指定するモデルに対して、全ての情報を一度のアクセスで引っ張り出すメソッド。書き方は↓
モデル名.includes(:モデル名)
コントローラーのインスタンス変数の指定の部分に書き込む。
・NoMethodErrorの解決方法
①コントローラの確認をして、メソッドの定義がなされているかを確認する。
②メソッドが正しく定義されている場合はDB上のカラムに対応する名前があるか確認する
③モデル同士のアソシエーションができているかを確認する
・演算子&&
条件A && 条件Bという記述になっているとき、条件A、B共に真の場合にtrueを返す。
・Orderメソッド
インスタンスの並び替えに使用。
インスタンス = モデル.order("データベースのカラム名 並び順")
ASCで昇順、DESCで降順を指定できる。
・部分テンプレート
_(title).html.erbというタイトルをつけて、<% render partial: "(title)" %>で呼び出す。共通のテンプレートを入れておくと繰り返し記述が減り、コードがスッキリする。
"(title)"の後にlocal: {post:"hello"}などと記入すると、部分テンプレートのなかでhelloという文字の入ったpostという変数が使えるようになる。
・ルーティングのネスト
例えばコメント機能に対して、特定のコメントがどのユーザーに紐づいているかなどを示すためのもの。
コントローラーが入れ子構造になっていて、先に記述されるものが親、後に記述されるものが子になる。いくつでも入れ子にできるが、保守性を確保するためにあまり多くしないことが理想的。