2009-03-03 15 views
9

Teniamo avvertimenti vedendo come la seguente quando si corre nostre specifiche:Rubino Object # avvisi id e Active Record

Object # id verrà ritirato; uso Object # OBJECT_ID

Il codice in questione accede l'id di un modello ActiveRecord (che è un attributo sul tavolo, ovviamente, piuttosto che l'ID istanza oggetto nel rubino VM).

Qualcuno sa come disattivare questi avvisi particolari o in qualche modo evitarli?

+0

Se questo è in un test, sei sicuro si sta accedendo un vero e proprio attivo registrare l'entità e non un oggetto rubino regolare? –

+0

Ah ... questi potrebbero essere oggetti derisi –

+0

Dovresti rispondere alla domanda, perché è stata completamente riparata. –

risposta

6

Sto assumendo che stai facendo beffardo/spegnendo (perché lei ha citato specifiche).

Nel mio caso, eseguo questi avvisi quando cancello un oggetto ActiveRecord e accedo al suo attributo ID.

Nei casi in cui ci si aspetta di accedere all'ID del vostro oggetto ActiveRecord, vi consiglio di effettuare le seguenti operazioni:

mock("MyActiveRecordObject", :id => 1001) 
10

Quando un oggetto discende da ActiveRecord::Base, una chiamata a id va a AR metodo :: B id piuttosto che il deprecato uno su Object.

Questo avviso di solito significa che uno dei miei oggetti non è quello che penso sia.

+0

Vorrei poter accettare due risposte corrette ... –

2

L'avviso # id oggetto si verifica solo nelle classi periodiche di rubini come NilClass. ActiveRecord :: Base esegue l'override dell'oggetto # id

4

L'oggetto non è in realtà un oggetto AR, di solito indica che alcuni dati recuperati non sono riusciti (Table.find_by_name('nonexistent name') restituirà nil). Se tutto ciò che si desidera è disattivare gli avvertimenti visibili, è possibile disattivare whiny_nils nella configurazione, altrimenti eseguire un test is_a? prima di provare ad accedere agli attributi dell'oggetto e gestire il caso di errore con garbo.

15

Provare a utilizzare [:id] invece di .id

+0

perché questa risposta è stata downvoted? è corretto. – ttvd

+0

Perché c'era un utente malintenzionato e downvoting di tutto. –

+0

sto inviando questo .. – bragboy