2016-03-18 2 views
0

У меня есть класс Store, у каждого магазина есть хэш с разными товарами. У каждого продукта есть хэш с различными видами продажи.Ruby sort_by of Objects/Classes undefined method 'sort_by' for

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' для продукта ..." !!

ответ

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, но, надеюсь, это указывает на то, что вы в правильном направлении.

Уточните свой вопрос, и я могу попытаться улучшить ответ.

+0

Inherits; потому что у меня есть больше методов, которые вам нужны. Из разных цен у меня есть метод, который выбирает минимальную цену. И моя ошибка заключалась в том, что я не применял заказ к Продукту, но только к одному из них. – Rat

Смежные вопросы