在rails/rails仓库执行rake test:mysql2时遭遇NoMethodError错误
执行
rake test:mysql2触发NoMethodError:undefined method `reset_default_attributes!' 在rails/rails代码仓库执行rake test:mysql2命令时,触发如下错误:
/Users/dorianmariefr/src/rails/activerecord/lib/active_record/dynamic_matchers.rb:22:in `method_missing': undefined method `reset_default_attributes!' for class ARUnit2Model (NoMethodError) Did you mean? reset_default_attributes from /Users/dorianmariefr/src/rails/activerecord/lib/active_record/attributes.rb:267:in `reload_schema_from_cache' from /Users/dorianmariefr/src/rails/activerecord/lib/active_record/timestamp.rb:86:in `reload_schema_from_cache' from /Users/dorianmariefr/src/rails/activerecord/lib/active_record/attributes.rb:292:in `reset_default_attributes' from /Users/dorianmariefr/src/rails/activerecord/lib/active_record/attributes.rb:6:in `reload_schema_from_cache' from <internal:kernel>:187:in `loop' from <internal:prelude>:5:in `irb' from /Users/dorianmariefr/src/rails/activerecord/lib/active_record/attributes.rb:266:in `reload_schema_from_cache' from /Users/dorianmariefr/src/rails/activerecord/lib/active_record/timestamp.rb:86:in `reload_schema_from_cache' from /Users/dorianmariefr/src/rails/activerecord/lib/active_record/model_schema.rb:568:in `inherited' from /Users/dorianmariefr/src/rails/activerecord/lib/active_record/inheritance.rb:286:in `inherited' from /Users/dorianmariefr/src/rails/activerecord/lib/active_record/locking/optimistic.rb:195:in `inherited' from /Users/dorianmariefr/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/activemodel-7.1.2/lib/active_model/attribute_methods.rb:381:in `inherited' from /Users/dorianmariefr/src/rails/activerecord/lib/active_record/attribute_methods.rb:262:in `inherited' from /Users/dorianmariefr/src/rails/activerecord/lib/active_record/attribute_methods/primary_key.rb:147:in `inherited' from /Users/dorianmariefr/src/rails/activerecord/lib/active_record/reflection.rb:136:in `inherited' from /Users/dorianmariefr/src/rails/activerecord/test/models/arunit2_model.rb:3:in `<top (required)>' ... 19 levels...
错误核心是代码中调用了不存在的reset_default_attributes!方法,系统提示的正确方法是reset_default_attributes。
解决步骤
- 打开文件
/Users/dorianmariefr/src/rails/activerecord/lib/active_record/attributes.rb - 定位到第267行,将
reset_default_attributes!修改为reset_default_attributes - 保存文件后重新执行
rake test:mysql2
原因分析
这是典型的代码笔误,在reload_schema_from_cache方法中错误地调用了带感叹号的方法名,而Active Record实际提供的是不带感叹号的reset_default_attributes方法。
内容的提问来源于stack exchange,提问作者Dorian
相关产品推荐
相关产品推荐

