こんばんは!
今まであまり使う機会がなかったメソッドをこの機に理解しよう!とおもったのですが、
pluckメソッドの使いどころがいまいちピンとこず、
今回はpluckメソッドとfind_byメソッドについて考えてみるというふわっとした感じです
(現在DM機能がうまく実装できず煮詰まり中。。。)
pluckメソッドはどんな時に使う?
pluck メソッドは、指定されたカラムの値を直接データベースから取得し、ActiveRecord オブジェクトのインスタンス化をせずに値の配列として返します。これは特に、カラムの値を素早く配列として取得したい場合に便利です。
↑引用元はこちら
初心者(私)はこれでもすぐ理解できなかったので、自分の言葉に直して使った状況も踏まえながら説明してみたいと思います。
ということで、私がどういうタイミングでpluckを使う流れになったのか考えてみました。
まさに絶賛煮詰まり中のDM機能実装の際、
ログイン中のユーザーがもっているチャットルームのidをpluckメソッドを用い
すべて参照した後、相互フォローしている相手とのチャットルームのid(バリデーションで2つ以上作れないようにしてある)をfind_byメソッドを使って引っ張り出し、そのチャットルームのidがpluckメソッドで参照したすべてのチャットルームのidの中に一致するものはあるか確認し、一致するものがなければnilが返ってくるというものでした。(あればそのチャットルームに入り、なければチャットルームを新規作成の流れ)
ここから分かったことは、pluckで探す値というのは引用にあるように指定されたカラムの内容の配列(値のみ)なので、そのあと何かと比較するという用途に使う際は処理が素早くなるため便利ということでした。
うーん、分かったような分からないような、、、いつか理解できる時が来たらまとめます
find_byメソッドはどんな時使う?
先ほど登場したfind_byメソッド、こちらは理解できたのでまとめてみます。
普段よく使うfindメソッドでは.find(params[:id])のように用いて、idとそのidが持つ他のカラムの情報もすべて参照できます。一方、find_byメソッドはfindが含まれているので探すことには間違いありませんが、値の出し方が違います。
find_byメソッドでは、find_by(:id)やfind_by(:email)などメソッドの後ろにカラムを指定し、その指定したカラムの最初に見つかった値のみ参照できます。
すごく簡単に言い換えると、あるか無いか確認したいときに使用します。
こんな時に使えます。↓
一件しかヒットしないレコードに対して使用
unique制約がかかっているカラムに対して使用
完全一致以外での検索に使用(あいまい検索等、完全一致よりも使用頻度は少ない)
引用させていただいたリンクを貼ります。多分世界一わかりやすいです。
最後に
今日はDM機能をうまく実装できず、悩んでばかりの1日でしたが明日から気持ちを切り替えて頑張っていきたいと思います!悩んでいたら日付を超えてしまった、、!みなさんおやすみなさい!
追記:
DM機能解決しました