【问题标题】:Ruby sort_by of Objects/Classes undefined method 'sort_by' for对象/类未定义方法'sort_by'的Ruby sort_by
【发布时间】:2016-07-05 16:32:27
【问题描述】:

我有一个类 Store,每个 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

为什么它返回“产品的未定义方法'sort_by'...”!!

【问题讨论】:

    标签: ruby sorting hash


    【解决方案1】:

    关于您的问题,我有很多不明白的地方: - 为什么Product 继承自Store? - 为什么SellOption 继承自Product? - 您是否尝试按价格对产品进行分类? - 如果卖出期权有不同的价格,你使用哪个价格? - 为什么不同尺寸有不同的价格? - 您从v 中提取的value 是什么,应该是Product

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

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

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

    除此之外,我不知道value 是什么,而且你必须弄清楚你想如何处理产品中的多个价格才能真正完成 sort_by,但希望这能指出你正确的方向。

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

    【讨论】:

    • 继承;因为我有更多需要的方法。从不同的价格中,我有一种选择最低价格的方法。我的错误是我没有将订单应用于产品,而是仅应用于其中一个。
    猜你喜欢
    • 1970-01-01
    • 2021-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多