Я управляю интернет-магазином сумок, где сумки могут быть четырех цветов - черный, коричневый, оранжевый и красный.Я заметил, что черные сумки продаются раньше, чем коричневые сумки и так далее.Это означает, что людям больше всего нравятся черные сумки.
На главной странице интернет-магазина я хочу выбрать и отобразить 10 сумок в сетке.Итак, я начинаю с выбора черных сумок.Если у меня в инвентаре 10 или более черных сумок, я останавливаюсь и не ищу остальных сумок других цветов.Однако, если бы у меня было 5 черных сумок, я бы продолжал искать коричневые сумки.После добавления этих коричневых сумок, если у меня все еще нет 10 сумок, я ищу оранжевые сумки и так далее.
Ниже приведена моя попытка реализовать решение в виде методов модели Rails:
class Handbag < ActiveRecord::Base
belongs_to :store
attr_accessor :color
end
class Store < ActiveRecord::Base
has_many :handbags
def handags_for_display
selected_handbags = []
["black", "brown", "orange", "red"].each do |color|
bags = get_handbags_by_color(color)
selected_bags += bags
if selected_bags.size >= 10
selected_handbags = selected_handbags[0..9]
break
end
end
selected_handbags
end
private
def get_handbags_by_color(color)
handbags.where("color = ?", color).limit(10)
end
end
Хотя это работает, мне интересно, есть ли лучший способ написать его.В частности, я думаю, что этот код можно преобразовать для использования перечислителя Ruby.