Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Probléma method_missing

Olá tudo bem , quando eu executo o meu código ele me diz que o atributo titulo não existe em uma classe nula :

NÃO ENCONTREI O MÉTODO : livro_que_mais_vendeu_por_titulo

C:/Users/mateus viana/Videos/Ruby/Testes/Sistema de Compras De LIvros/Sistema.rb:30:in <main>': undefined methodtitulo' for nil:NilClass (NoMethodError)

segue meu código abaixo :

Estoque.rb


    def method_missing(name)

      matcher = name.to_s.match "(.+)_que_mais_vendeu_por_(.+)"

      if matcher

        tipo = matcher[1]
        campo = matcher[2].to_sym
        que_mais_vendeu_por(tipo , &campo)

      else

        super

      end

      puts ("NÃO ENCONTREI O MÉTODO  : #{name}")

    end

Sistema.rb

online_arquitetura = Livro.new("INTRODUÇÃO A ARQUITETURA E DESING DE SOFTWARE" , 50 , 2012 , true , "INTRÍNSECA" , "ebook")

.....

stoque << agile << agile << programming << pragramatic << arquitetura << programming << programming << revistona << revistona << online_arquitetura

.......

estoque.vende(online_arquitetura)
....

puts estoque.livro_que_mais_vendeu_por_titulo.titulo
  puts estoque.revista_que_mais_vendeu_por_titulo.titulo
  puts estoque.ebook_que_mais_vendeu_por_titulo.titulo
1 resposta
solução!

Oi Mateus,

A sua implementação coloca um puts no final do método o que faz com que o retorno do método seja o resultado do puts.

Em Ruby o retorno do método é sempre o retorno da última linha executada e o puts retorna nil.

Coloque a linha do puts para dentro do else que não vai acontecer esse problema.

Abraço!