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
primo! non sembra essere stato deprecato. – Doon
dove è definito 'first!'? COME non riesco a trovarlo in alcuna documentazione o fonte? – engineersmnky
È definito come parte dei rilevatori di record attivi ma non sembra più essere definito sul proxy di raccolta. – Doon