丸メガネの備忘録

プログラミング学習中のエンジニア志望30代ギリギリ前半

今日の勉強 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という変数が使えるようになる。

 

・ルーティングのネスト

 例えばコメント機能に対して、特定のコメントがどのユーザーに紐づいているかなどを示すためのもの。

 コントローラーが入れ子構造になっていて、先に記述されるものが親、後に記述されるものが子になる。いくつでも入れ子にできるが、保守性を確保するためにあまり多くしないことが理想的。