こんなテーブルがあったとします。
title | headline | content |
---|---|---|
book1 | 自己啓発 | アウトプットする |
book1 | ストレス解消 | よく寝る |
book2 | レシピ | カレー |
どんな本に何が書いてあったのかを保存しているテーブルと仮定。
この時、保存している本のtitleを重複無しでずら〜っと並べるにはどうすれば良いか?
(一対多のアソシエーションは使用しない前提で)
1 2 3 |
<% @books.each do |book| %> <%= book.title %> <% end %> |
とすると、
book1 |
book1 |
book2 |
が取り出されてしまいます。
pluckとuniqを使用する
結論から言うと、以下の方法で重複無しで配列を取得出来ました。
1 2 3 |
<% @books.pluck(:title).uniq.each do |book| %> <%= book %> <% end %> |
調べた限りでは、
- pluck(:title)でtitleカラムの配列を取得
- uniqで重複を削除した配列を作成
と言うことをやっているようです。
これで、
book1 |
book2 |
と表示されるようになりました。
余談
これではうまく取り出せず。
1 2 3 |
<% @books.uniq.each do |book| %> <%= book.title %> <% end %> |
これでやっても最初と同じで、重複した値が並べられました。
多分ですが、
uniqは配列から重複を削除するとあるので、最初にtitleカラムの配列を用意しておく必要があるからかなぁと思っております。
コメント