首页 文章

从Rails 4.1.4更新到4.2.0之后,AR CollectionProxy上的“first!”引发了“未定义的方法[]为nil”

提问于
浏览
5

我开始从Rails 4.1.4升级到Rails 4.2.0 . 它看起来像第一个!某些活动记录关联不再支持 .

first! (在ActiveRecord :: Associations :: CollectionProxy上)发生了什么导致它现在失败?

如何修复行为,使其像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

Updated

深入研究ActiveRecord,我发现它失败了:

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

loaded? 返回true,但@records为零 . 抛出调试器并调用 find_nth_with_limit(offset, 1).first 会返回我期望的记录 .

first!defined in finder_methods.rb in active record问题似乎是该协会认为它已加载,但@records是零

1 回答

相关问题