■プログラミング学習
◎current_userメソッド
Gemのdeviseを導入していると使用できるメソッドで、現在ログインしているユーザーの情報を取得ができます。
◎mergeメソッド
ハッシュを統合させるときに使用するRubyのメソッドです。
たとえば、tweetの情報を持つハッシュと、user_idを持つハッシュを結合、保存する場合は下記のような記述する。
```
tweet = {name: "たなか" ,text:"こんにちは"}
uid = {user_id:"1"}
tweet.merge(uid)
=> {:name=>"たなか",:text=>"こんにちは",:user_id=>1}
```
◎アソシエーション
複数のモデルから情報を必要とする場合は、テーブル同士を関連付けし、イップのモデルから、もう一方のモデルにアクセス出来るようにすることをアソシエーションという。
アソシエーションはモデルに定義をし、メソッドは下記になります。
・has_many メソッド
Userモデル視点で考えたときに、あるユーザーが作成した投稿は複数個ある状態で、つまり一人のユーザーは複数の投稿を持っている。
このような場合は、has_manyメソッドを使用する。
```
has_many :tweets
```
・belongs_toメソッド
一つの投稿に対しては、一人のユーザーが投稿したものになり、一人のユーザーに所属する。
このような場合は、belongs toメソッドを使用する。
```
belongs_to :user
```
※ アソシエーションでbelongs_toを指定した場合、相手のモデルでバリデーションが設定されているため、presence:trueのバリデーションを設ける必要はない。
◎N +1 問題
N+1問題とは、アソシエーションを利用した場合に限り、データーベースへのアクセス回数が多くなってしまう問題です。
Tweet.allなどでデータを取得する場合は、1度のアクセスで完了します。
しかし、ツイートが複数存在し、それぞれにユーザー名を表示するケースを考えると
tweetsに関連するusersの情報の取得に、ツイート数と同じ回数のアクセスが必要になります。1億ツイートあると、1億回以上アクセスすることに。
これを解消するために、includesメソッドを使用します。
◎includesメソッド
includesメソッドは、引数に指定された関連モデルを1度のアクセスでまとめて取得できます。
includes(:紐づくモデル)
■読書
知的戦闘力を高める 独学の技法 著山口 周 氏を、読んでいます。
色々な本を読んでいても、なかなか自分の思ったようなアウトプットが出来ていないと感じており、本書を手にしました。
まだ途中のため、また次回読み終えたときにも同じようなことを書くと思います。
個人的に、覚えることはあまり重要ではなく(外にためておく、ノートやデジタルに)それよりも、受け取った情報をいかに具体⇔抽象し、抽象化した上で、今解決したいことに使えないかを結びつけるといった方法で学んでいくというのが自分には足りていないと感じました。
本を読んで、それを受け入れて使うではなく、自分なりの解釈として受け取り、差し出すようなことを続けていきたいと思います。
(いろんなところにメモとっているので、それもどこかでまとめていく必要があるのかも)