如果我在ActiveRecord中有一个带有子对象集合的对象,即:
我认为这是因为ActiveRecord已经占用了
class Foo < ActiveRecord::Base
has_many :bars, ...
end
我尝试使用数组的find
方法来查询该集合:
foo_instance.bars.find { ... }
我收到:
ActiveRecord::RecordNotFound: Couldn't find Bar without an ID
我认为这是因为ActiveRecord已经占用了
find
方法,以便自己的目的。现在,我可以使用detect
,一切都很好。然而,为了满足自己的好奇心,我尝试使用元编程来明确地窃取find
方法进行一次运行:unbound_method = [].method('find').unbind
unbound_method.bind(foo_instance.bars).call { ... }
我收到了以下错误:
TypeError: bind argument must be an instance of Array
很明显Ruby并不认为foo_instance.bars
是一个数组,然而:
foo_instance.bars.instance_of?(Array) -> true
有人能帮我解释一下这个问题,以及如何通过元编程来解决它吗?