我正在经营一家在线手袋商店,手袋可以有四种颜色——黑色、棕色、橙色和红色。我注意到黑色手袋比棕色手袋卖得更快等等。这意味着人们最喜欢黑色手袋。
在网上商店的主页上,我想选择并以网格布局显示 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 的枚举器。