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?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top