6
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

where.not + distinctについてのメモ

Last updated at Posted at 2019-01-10

RailsでECサイトを作成する際、メイン商品のカテゴリーに紐づいた関連商品をコントローラーで取得し、メイン商品のビューで表示させたいという時に、

・関連商品にメイン商品が取得されてしまう
・異なるカテゴリーごとにそれぞれ同じ商品を取得してしまう
 (例えばRuby Bagという商品がRuby、BAGSという複数のカテゴリにそれぞれ属していると、
  BAGSの関連商品でRuby Bagが2回表示されてしまう。)

という問題が発生した。その時に解決法として使用した方法をメモしておく。

使用したコード
@related_productsで@productの関連商品を、一意かつ@productを含まずに取得

@product = Spree::Product.find(params[:id])
@related_products = Spree::Product.in_taxons(@product.taxons).includes(master: [:images, :default_price]).where.not(id: @product.id).distinct

where.not(条件)

条件に一致しないものを取得する。

例 hogeという名前のユーザー以外のユーザーを取得する

User.where.not(name: "hoge")

distinct

重複のない一意のレコードを取得する。
なお、同様のメソッドにuniqがあるが、Rails5から非推奨となり、distinctが推奨されている。

参考

http://railsdoc.com/references/not
https://railsguides.jp/active_record_querying.html

6
10
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
6
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?