class Product < SimpleStore
@@Product = []
@@uniqueid = []
attr_reader :title
attr_reader :price
attr_reader :manufacturer
attr_reader :manufacturer_code
attr_reader :barcode
attr_reader :hash
attr_reader :code
attr_writer :price
attr_writer :manufacturer_code
attr_writer :code
def initialize (hsh = {"title" =>nil, "price" =>0, "manufacturer_code" =>0, "barcode" =>nil, "product_code" =>0})
@@Product << self
@title = hsh["title"]
@price = hsh["price"]
@manufacturer_code = hsh["manufacturer_code"].to_i
@manufacturer = AUTHORIZED_MANUFACTURERS.index(manufacturer_code)
@barcode = hsh["barcode"]
@code = "#{PRODUCT_TYPES.index[product_code]}--#{@manufacturer_code}--#{@barcode}"
@@uniqueid << @code
Quando tento inicializar um novo produto
product1 = Product.new({"title"=>"teste","price"=>10,"manufacture_code"=>0,"barcode"=>"aaa111","product_code"=>1})
eu recebo ArgumentError: wrong number of arguments (given 0, expected 1)
Respostas:
2 para resposta № 1A passagem do argumento da iniciailização que você mostra funciona bem:
def foo(hsh={"title"=>"teste","price"=>10,"manufacture_code"=>0,"barcode"=>"aaa111","product_code"=>1})
end
foo({"title"=>"teste","price"=>10,"manufacture_code"=>0,"barcode"=>"aaa111","product_code"=>1})
# => nil
Acho que o erro está vindo disso:
PRODUCT_TYPES.index[product_code]
Observe antes que você chama o index
método como este:
AUTHORIZED_MANUFACTURERS.index(manufacturer_code)
Em um caso, você está usando parênteses (da maneira correta). No outro, você usa []
(incorreto).
Este é um bom exemplo de porque é importante ler atentamente as mensagens de erro e examinar a linha num que fornece para saber a origem do erro.