LoginSignup
0
1

More than 3 years have passed since last update.

【Rails】重複した要素を取り除くメソッド!

Last updated at Posted at 2020-11-23

現在作っているウェブアプリで、記事を投稿したユーザーの画像と名前をサイドバーに一覧表示したい!と思って使ったメソッドの話です。

まずやってみたのは、controllerで投稿ユーザーの情報をインスタンス変数 @post_usersに代入。

def post_users
  @post_users = Post.select(:user_id)
end

その後、viewのファイルで@post_usersから要素を取り出して表示。

しかしこのやり方だと(当然ですが)ブログの投稿の数だけユーザーの写真と名前が表示されてしまいます(写真ではuserの象が2つ出てきている)。
スクリーンショット 2020-11-23 21.58.04.png

そこで使ったのがdistinctメソッドです。Railsガイドにも記述がありました。
https://railsguides.jp/active_record_querying.html
(下記Railsガイドより)

特定のフィールドについて、重複のない一意の値を1レコードだけ取り出したい場合、distinctを使用できます。

Client.select(:name).distinct
上のコードを実行すると、以下のようなSQLが生成されます。

SELECT DISTINCT name FROM clients

「重複のない一意の値を1レコードだけ取り出したい場合」というのがいかにもRailsガイドっぽい言い回しの気がしますが、、、要するに

モデル.select(:取得する列).distinct"

の形にすれば、重複した要素をはじいてくれるようです。早速controllerにdistinctを追加。

def post_users
  @post_users = Post.select(:user_id).distinct
end

今度はうまくいきました。
スクリーンショット 2020-11-23 21.57.21.png

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1