Ruby sort_by of Objects / Classes undefined method' sort_by'对于

时间:2016-03-18 19:12:22

标签: ruby sorting hash

我有一个类Store,每个商店都有一个不同产品的Hash,每个产品都有一个不同类型的Hash。

class Store
    def initialize
        @store_products = Hash.new 
        #@store_products['product_id'] = Product
    end
end

class Product < Store
    def initialize(model)
        @model = model
        @sell_option = Hash.new 
        #@sell_option['sell_name'] = SellOption
    end
end

class SellOption < Product
    def initialize(size, price, stock)
        @size = size
        @price = price
        @stock = stock
    end
end

有了这些数据:

product1 = Product.new("shirt1")
product1.add_sell_option(SellOption.new("S", 12, 10))
product1.add_sell_option(SellOption.new("M", 15, 10))
product1.add_sell_option(SellOption.new("L", 14, 10))

product2 = Product.new("shirt2")
product2.add_sell_option(SellOption.new("M", 6, 10))
product2.add_sell_option(SellOption.new("L", 7, 10))

product3 = Product.new("shirt2")
product3.add_sell_option(SellOption.new("M", 10, 10))
product3.add_sell_option(SellOption.new("L", 11, 10))
store = Store.new

store.add(product1)
store.add(product2)
store.add(product3)

在类商店中,我想要一个按价格对我的产品进行排序的方法。 如果使用这个表达式:

puts store.products_sorted_by_price

def products_sorted_by_price
    @store_products.each_value do |product| 
        product.sort_by{|k, v| v.value.price}
    end
end

为什么它会返回&#34;未定义的方法&#39; sort_by&#39;对于产品...&#34; !!

1 个答案:

答案 0 :(得分:0)

我对你的问题有很多不了解的事情:   - 为什么Product继承自Store?   - 为什么SellOption继承自Product?   - 您是否尝试按价格对产品进行分类?   - 如果卖出期权的价格不同,您会使用哪个价格?   - 为什么不同尺码的价格不同?   - 您从value中提取的v是什么Product

无论如何...... sort_by通常在Enumerable上运行,而Product不是一个,据我所见。因此,确切的答案是Ruby说undefined method 'sort_by' for Product,因为您没有在sort_by上定义Product,或者从定义它的类继承。

我猜你打算做更像这样的事情:

@store_products.sort_by {|k,v| v.value.price }?

即便如此,我也不知道value是什么,在您真正完成sort_by之前,您必须弄清楚如何处理产品中的多个价格,但希望这能指出你正确的方向。

澄清你的问题,我可以尝试改进答案。