私はオンラインハンドバッグストアを運営しており、ハンドバッグは黒、茶色、オレンジ、赤の4色にすることができます。黒のハンドバッグは茶色のハンドバッグなどよりも早く売れることに気づきました。つまり、黒いハンドバッグが一番好きな人です。
オンラインストアのホームページで、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の列挙子を使用するように変換できると思います。