WEB系プログラミングに関する雑記ブログ

このブログは、主にWEB系の話(プログラミング、IT系のニュースなど)をします。

中間テーブルを介してデータを取得する方法(rails)

中間テーブルを介してデータを取得する方法について、 忘備録としてここに記しておきます。

例:

productsテーブル

product_categoriesテーブル(中間テーブル)

categoriesテーブル

があるとします。

一つの商品(product)はいくつかのカテゴリー(category)を持ち、

一つのカテゴリー(category)はいくつかの商品(product)を持つので、

多対多の関係が成り立ちます。

中間テーブルはproduct_categoriesテーブルです。

そして、中間テーブルに保存されているレコードの値でを引っ張り出したい時、

こんな風に記述します。

@product.product_categories

category = @product.product_categories.select(:category_id)

とい部分。

@product.product_categoriesというのは、 商品(product)から、 中間テーブルであるproduct_categoryテーブルにいき、

その後、

〜.select(:category_id)で、

@productに代入されている商品のカテゴリidのみを取得するという意味になります。

このselectというのは、 テーブルの中で指定したカラムのみを取得したいときに用います。

そして、次の行の、

product_category = category.last
category_id = product_category[:category_id]

という部分では、 複数あるカテゴリの中で最後にレコードに当たるカテゴリのみを、 product_categoryに代入するということになります。

そして、product_category[:category_id]により、

カテゴリidのみを、category_idに代入しています。

最後に、

@products = Category.find(category_id).products

とすることで、 関連するカテゴリの商品を取り出し、@productsに代入することができます。

あとは、ビューファイルにて、 @productsに代入された情報を表示します。

      - @products.each do |product|
          %h2
            = product.name
          .price-box
            ¥
            = product.price
          .price-box-tax (税込)

上記のようにビューで記述すれば、 商品の名前、値段を表示することができます。

それでは、この辺で!