Ruby Objeto#ID AVISOS E REGISTRO ATIVO
-
03-07-2019 - |
Pergunta
Continuamos vendo avisos como o seguinte quando executamos nossas especificações:
Objeto#ID será descontinuado; Use objeto#object_id
O código em questão é acessar o ID de um modelo ActiveRecord (que é um atributo na tabela, obviamente, em vez do ID da instância do objeto na VM Ruby).
Alguém sabe como desligar esses avisos em particular ou de alguma forma evitá -los?
Solução
Estou assumindo que você está fazendo zombarias / malhas (porque você mencionou especificações).
No meu caso, encontro esses avisos quando fico com um objeto ActiveRecord e acesse seu atributo de ID.
Nos casos em que você espera acessar o ID do seu objeto ActiveRecord, eu recomendo que você faça o seguinte:
mock("MyActiveRecordObject", :id => 1001)
Outras dicas
Tente usar [:id]
ao invés de .id
Quando um objeto é descendente de ActiveRecord::Base
, uma chamada para id
vai para ar :: b's id
método em vez do depreciado em Object
.
Esse aviso geralmente significa que um dos meus objetos não é o que eu acho que é.
Seu objeto não é realmente um objeto AR, geralmente indicando que alguma recuperação de dados falhou (Table.find_by_name('nonexistent name')
retornará nil
). Se tudo o que você quer fazer é desligar os avisos visíveis, você pode desligar whiny_nils
em sua configuração, caso contrário, faça um is_a?
Teste antes de tentar acessar os atributos do objeto e lidar com o caso de falha graciosamente.
O aviso do objeto#ID acontece apenas em aulas regulares de rubi como o Nilclass. ActiveRecord :: Base substitui o objeto#id