category_id = 1 の sub_category を持つ items を取得したい。
SQL
SQL
-- サブクエリ(副問合せ)を使います。
SELECT * FROM items WHERE sub_category_id IN
(SELECT * FROM sub_categories WHERE category_id = 1);
Rails
Rails
sub_categories = SubCategory.where(category_id: 1)
@items = Item.where(sub_category: sub_categories)
# => #<ActiveRecord::Relation [#<Item id: 1, name: "apple juice", sub_category_id: 1>, #<Item id: 2, name: "orange juice", sub_category_id: 1>, #<Item id: 3, name: "coca cola", sub_category_id: 2>, ...]>
.where(category_id: 1) のところは、.where(category: @category) でもOK。
これでできました。![]()
まさか.where()でActiveRecordの問合せ結果を渡すことができるとは知らなかったですね...
かなり基礎的なことですが、Rails/SQL初心者の自分は、これを探し出すのに地味に苦労しました。
これが誰かのお役立てできれば幸いです。
