5

Sto iniziando l'aggiornamento da Rails 4.1.4 a Rails 4.2.0. Sembra come prima cosa! non è più supportato su alcune associazioni di record attive."prima!" su AR CollectionProxy genera "undefined method [] for nil" dopo l'aggiornamento da Rails 4.1.4 a 4.2.0

Che cosa è successo a first! (su ActiveRecord :: Associations :: CollectionProxy) per causare il fallimento ora?

Come può risolvere il comportamento in modo che funzioni come in 4.1.4?

Rails 4.1:

(byebug) user.organization.registration_codes 
#<ActiveRecord::Associations::CollectionProxy [#<RegistrationCode id: 259, code: "AWESOMESAUCE" ... >]> 

(byebug) user.organization.registration_codes.first! 
#<RegistrationCode id: 259, code: "AWESOMESAUCE" ... > 

Rails 4.2:

(byebug) user.organization.registration_codes 
#<ActiveRecord::Associations::CollectionProxy [#<RegistrationCode id: 259, code: "AWESOMESAUCE" ... >]> 

(byebug) user.organization.registration_codes.first! 
NoMethodError Exception: undefined method `[]' for nil:NilClass 
nil 

Aggiornato

Scavando nel ActiveRecord, lo trovo non riuscendo qui:

def find_nth(index, offset) 
    if loaded? 
    @records[index] 
    else 
    offset += index 
    @offsets[offset] ||= find_nth_with_limit(offset, 1).first 
    end 
end 

loaded? restituisce true, ma @records è nullo. Lanciare un debugger e chiamare find_nth_with_limit(offset, 1).first restituisce il record che mi aspetto.

first! è defined in finder_methods.rb in active record il problema sembra essere che l'associazione pensa che la sua carica, ma è nulla @records

+0

primo! non sembra essere stato deprecato. – Doon

+0

dove è definito 'first!'? COME non riesco a trovarlo in alcuna documentazione o fonte? – engineersmnky

+0

È definito come parte dei rilevatori di record attivi ma non sembra più essere definito sul proxy di raccolta. – Doon

risposta

Problemi correlati