Ruby Object # ID avvisi e Record attivo
-
03-07-2019 - |
Domanda
Continuiamo a visualizzare avvisi come i seguenti quando eseguiamo le nostre specifiche:
L'ID oggetto # sarà deprecato; usa Object # object_id
Il codice in questione sta accedendo all'ID di un modello ActiveRecord (che è un attributo sulla tabella, ovviamente, piuttosto che l'ID dell'istanza dell'oggetto nella VM Ruby).
Qualcuno sa come disattivare questi avvisi particolari o in qualche modo evitarli?
Soluzione
Suppongo che stai facendo beffe / stub (perché hai menzionato le specifiche).
Nel mio caso, ho riscontrato questi avvisi quando stub un oggetto ActiveRecord e accedo al suo attributo ID.
Nei casi in cui prevedi di accedere all'ID del tuo oggetto ActiveRecord, ti consiglio di effettuare le seguenti operazioni:
mock("MyActiveRecordObject", :id => 1001)
Altri suggerimenti
Prova a utilizzare [: id]
anziché .id
Quando un oggetto discende da ActiveRecord :: Base
, una chiamata a id
va al metodo id
di AR :: B anziché al deprecato su Object
.
Quell'avvertimento di solito significa che uno dei miei oggetti non è quello che penso.
Il tuo oggetto non è in realtà un oggetto AR, di solito indica che il recupero di alcuni dati non è riuscito ( Table.find_by_name ('nome inesistente')
restituirà nil
). Se tutto ciò che vuoi fare è disattivare gli avvisi visibili, puoi disattivare whiny_nils
nella tua configurazione, altrimenti esegui un test is_a?
prima di provare ad accedere agli attributi dell'oggetto e gestire il caso di errore con garbo.
L'avviso ID oggetto # si verifica solo su normali classi ruby ??come NilClass. ActiveRecord :: Base ignora l'oggetto # id