如何为Ruby编写猴子补丁?
我使用的是Rails 3,出现如下错误:如何为Ruby编写猴子补丁?,ruby,monkeypatching,Ruby,Monkeypatching,我使用的是Rails 3,出现如下错误: undefined method `persisted?' for []:Array # patches/array.rb class Array # Array is a top-level class def persisted? false # or your own implementation end end # some/other/script.rb require 'path/to/patches/array.rb'
undefined method `persisted?' for []:Array
# patches/array.rb
class Array # Array is a top-level class
def persisted?
false # or your own implementation
end
end
# some/other/script.rb
require 'path/to/patches/array.rb'
my_array = [1, 2, 3]
puts my_array.persisted?
我想用monkeypatch来解决这个问题。首先:它应该是什么样子?我对Ruby源代码中数组类的嵌套知之甚少。我非常感谢您的指导。基本上,您只需像编写任何其他类一样编写类和函数,并将其添加到原始类定义中 像这样:
class Array
def persisted?
# Does it persist?
end
end
基本上,您只需像编写任何其他类一样编写类和函数,然后将其添加到原始类定义中 像这样:
class Array
def persisted?
# Does it persist?
end
end
猴子补丁看起来像这样:
undefined method `persisted?' for []:Array
# patches/array.rb
class Array # Array is a top-level class
def persisted?
false # or your own implementation
end
end
# some/other/script.rb
require 'path/to/patches/array.rb'
my_array = [1, 2, 3]
puts my_array.persisted?
现在:询问数组实例是否持久化可能是什么意思?猴子补丁如下所示:
undefined method `persisted?' for []:Array
# patches/array.rb
class Array # Array is a top-level class
def persisted?
false # or your own implementation
end
end
# some/other/script.rb
require 'path/to/patches/array.rb'
my_array = [1, 2, 3]
puts my_array.persisted?
现在:询问数组实例是否持久化可能是什么意思?您做得不对。该错误表明您正在传递ActiveRecord对象数组?一个只需要一个ActiveRecord对象的函数。加雷斯:谢谢!你知道我如何解决这个问题吗?我希望得到任何指导。我在Mongoid做嵌套表单时遇到了一个奇怪的错误。如果没有看到更多的代码和/或错误跟踪,这就是帖子:你做错了。该错误表明您正在传递ActiveRecord对象数组?一个只需要一个ActiveRecord对象的函数。加雷斯:谢谢!你知道我如何解决这个问题吗?我希望得到任何指导。我在Mongoid执行嵌套表单时遇到了一个奇怪的错误。如果没有看到更多的代码和/或错误跟踪,这是帖子: