5

Ich fange an, von Rails 4.1.4 auf Rails 4.2.0 zu aktualisieren. Es sieht zuerst aus! wird bei einigen aktiven Datensatzzuordnungen nicht mehr unterstützt."zuerst!" auf AR CollectionProxy löst nach der Aktualisierung von Rails 4.1.4 auf 4.2.0 "undefined method [] für nil" aus

Was ist mit first! (auf ActiveRecord :: Associations :: CollectionProxy) passiert, damit es jetzt fehlschlägt?

Wie kann das Verhalten behoben werden, so funktioniert es wie 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 

Aktualisiert

Graben in Active, finde ich es hier versagt:

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

loaded? gibt true zurück, aber @records ist null. Einen Debugger zu werfen und find_nth_with_limit(offset, 1).first aufzurufen gibt den Rekord, den ich erwarte, zurück.

first! ist defined in finder_methods.rb in active record das Problem scheint zu sein, dass der Verein seine geladene denkt, aber @records ist gleich Null

+0

zuerst! scheint nicht veraltet zu sein. – Doon

+0

wo ist 'first!' Definiert? Wie kann ich es in keiner Dokumentation oder Quelle finden? – engineersmnky

+0

Es ist als Teil der aktiven Datensatzfinder definiert, scheint aber nicht mehr auf dem Sammelproxy definiert zu sein. – Doon

Antwort

Verwandte Themen