Задать вопрос
AdilA
@AdilA
Нравится кодить, изучаю go c echo

Как вытащить размеры по коллекции объектов в rails?

Есть категории, есть суб категории и есть товары, у товаров есть размер у каждого товара свой размер, все размеры разные, например у холодильников от 5 до 10 а у микроволновок от 0,5 до 3, как на странице с товарами определенной суб категории динамически вытащить все размеры которые принадлежат суб категории, сгрупированные по размеру например от 6 до 10?
Куда копать? как это сделать?
Может создать модель size связать с субкатегориями или как?
Вот чтобы ссылки были по такому принципу
диаметр: 6...10 11...40 41...59 60...80 82.5...114 118...152 152.4...203 219...325 330...555
Сейчас все выглядит так:
Товары
class Item < ActiveRecord::Base
	belongs_to :sub_category, foreign_key: 'category_id'
	has_many :cart_items
	has_many :carts, through: :cart_items
end

Субкатегории
class SubCategory < ActiveRecord::Base
	extend FriendlyId
	friendly_id :name, use: :slugged

  belongs_to :category
  has_many :items, foreign_key: "category_id"

  	def normalize_friendly_id(input)
    	input.to_s.to_slug.normalize(transliterations: :russian).to_s
  	end
end

Таблица Items
id | name | category_id | price | size |
1 | трусы | 15 | 2000|6x0.8|
2 |трусы c | 15 | 2500|6x0.5|
вырезом

id | name | category_id | price | size |
1 | трусы | 15 | 2000|6x0.8|
2 |трусы c | 15 | 2500|6x0.5|
вырезом
id | name | category_id | price | size |
1 | кабель | 25 | 350 |10x3|
1 | кабель| 25 | 350 |10x3.5|
и диаметры к ним
диаметр: 6...10 11...39 40...140
Спасибо посмотрел на Propetry на Spree у Propetry есть join табличка Product_propetry все таки придеться еще плодить моделей)
  • Вопрос задан
  • 2431 просмотр
Подписаться 2 Оценить 2 комментария
Решения вопроса 2
Prognosticator
@Prognosticator
TODO: Здесь будут ворованные умные мысли, типа мои
Item.where(:category_id => your_category_id, :size => 6..10)
Ответ написан
@vsuhachev
Вам нужен фильтр товаров по их свойствам.

Во первых вы выбрали на мой взгляд не оптимальный способ UI фильтрации (ссылки X...Y). Такой способ фильтрации используется например у эльдорадо и он imho неудобен. Гораздо удобнее ползунки, списки, чекбоксы/радиокнопки - пример яндекс маркет

Во вторых очевидно, что для товаров каждой категории свойства могут быть разные. Соответственно вам нужно все это где-то хранить. Вы сейчас храните эту информацию в столбцах таблицы товаров и в коде контроллера, но это не гибкий путь.

Для решения проблемы хранения нужно добавлять связанную модель "свойство" и "значение свойства". Для каждой категории указывать какие свойства имеют товары этой категории. Для каждого товара хранить значения этих свойств.

Как вариант - хранить значения свойств не в отдельной таблице, а в json в таблице товаров. Но тогда придется отдельно озаботится реализацией поиска по типу внешнего поискового движка. Этот способ имеет ряд преимуществ если товаров много, но и реализация посложнее будет.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы