我开始从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
更新
深入研究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为零
答案 0 :(得分:2)
这是Rails中的回归。在rails 4.2中的已加载集合上调用其中一个bang finder方法不起作用。