Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何为Ruby编写猴子补丁?_Ruby_Monkeypatching - Fatal编程技术网

如何为Ruby编写猴子补丁?

如何为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'

我使用的是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'
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执行嵌套表单时遇到了一个奇怪的错误。如果没有看到更多的代码和/或错误跟踪,这是帖子: