Rails 5, Postgresql 10, Ruby 2.5.1
У меня есть товары (model Product
) и много географических регионов (model Region
). У меня нет дубликатов товаров, поэтому один товар может быть в регионе (id = 2) и регионе (id = 3). Также есть основной регион (id = 1), в котором есть все продукты.
Пример (что я хочу):
1) В регионе 1 мы видим все продукты
2) В области 2 мы видим продукты для области 2, а затем (после завершения / объединения) другие продукты (из области 1 без продукта из области 2).
Я думаю, что могу
1) создать модель Region (has_many products).
2) поиск по Region (region1.products
)
Но это будет 3 запроса к БД.
- select fields from regions
- select product_id from regions_products where region_id
- select fields from products where id
А если Я хочу продукты из региона2 + регион1.
- select fields from regions
- select product_id from regions_products where region_id = 2 inner join product_id from regions_products where region_id = 1
- select DISTINCT fields from products where id order by region_id = 2
Есть ли более оптимальный способ? И какие показатели я могу сделать, чтобы оптимизировать его?