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
Cuando trato de inicializar un nuevo producto
product1 = Product.new({"title"=>"teste","price"=>10,"manufacture_code"=>0,"barcode"=>"aaa111","product_code"=>1})
yo obtengo ArgumentError: wrong number of arguments (given 0, expected 1)
Respuestas
2 para la respuesta № 1El paso de argumentos de la iniciación que muestra funciona bien:
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
Creo que el error proviene de esto:
PRODUCT_TYPES.index[product_code]
Observe antes que llame al index
método como este:
AUTHORIZED_MANUFACTURERS.index(manufacturer_code)
En un caso está utilizando paréntesis (la forma correcta). En el otro, usas []
(incorrecto).
Este es un buen ejemplo de por qué es importante leer atentamente los mensajes de error y observar el número de línea que le da para el origen del error.