如何解决在本地使用ActiveRecord :: NullMutationTracker:Class的Rails未定义局部变量或方法“ first” 堆栈
当我们调用任何类似的方法时,我们在项目的所有本地设置(当前)上都会收到此错误
belongs_to :abc
after_create :some_method
def some_method
if self.abc.saved_change_to_parent_id?
...
// or even self.abc.parent_id_before_last_save
end
它给出:
NameError (undefined local variable or method `first' for ActiveRecord::NullMutationTracker:Class):
app/models/model_name.rb:50:in `some_method'
是的,没有包含rails内部文件路径等的完整跟踪,我仅获得我的项目文件跟踪。也许是某些记录器配置问题,对获得完整跟踪的任何帮助也将不胜感激。
我在互联网上找不到这些问题,这就是为什么在这里发布。
PS:因为我的复制量很少,所以未发布在rails问题跟踪器(github问题)上。
堆栈
红宝石:2.4.3
rails:5.1.5(也在5.1.7上尝试过)
操作系统:Ubuntu 20,也在macOS上尝试过
谢谢。
UPDATE1 :使用byebug,我进入了发生错误的跟踪:
/Users/dev/.rvm/gems/ruby-2.4.3/gems/acts_as_singleton-0.0.8/lib/acts_as_singleton.rb:43
它是here,因此它不是直接来自rails,而是由于某种原因我们在代码中包含的非常过时的gem。
解决方法
正如我在更新中发布的那样,问题不在于导轨或其他任何东西,我使用了byebug来跟踪跟踪,它类似于:
activemodel-5.1.5/lib/active_model/attribute_methods.rb:384
activerecord-5.1.5/lib/active_record/attribute_methods/dirty.rb:146
activerecord-5.1.5/lib/active_record/attribute_methods/dirty.rb:319
activerecord-5.1.5/lib/active_record/attribute_methods/dirty.rb:315
acts_as_singleton-859f49112c03/lib/acts_as_singleton.rb:43
最后一行不应出现,因为我们没有在任何涉及的模型上使用acts_as_singleton
。
因此,在进行了一些跟踪之后,发现宝石有问题。我创建了一个叉子,并使用了那个叉子。这是分叉:https://github.com/ziaulrehman40/acts_as_singleton(是从另一个分叉中分叉的,该分叉似乎也有其他修复程序)。您可以看到我的更改here。
出了什么问题?
此gem在Singleton
模块内编写了一个名为ActiveRecord
的模块。除非您意识到已经有另一个名为Singleton的模块,否则这似乎还可以。 Whihc被包含在:
gems/activerecord-5.1.5/lib/active_record/attribute_mutation_tracker.rb:83
class NullMutationTracker # :nodoc:
include Singleton
...
如您所见,此Singleton模块被过时的gem(acts_as_singleton
)意外覆盖(或不确定扩展)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。