如何向ActiveRecord :: Batches添加方法?

时间:2015-02-20 15:05:38

标签: ruby rails-activerecord

我试图为ActiveRecords find_in_batches方法添加自定义实现。首先,我尝试monkeypatch相应的模块:

module ActiveRecord
  module Batches
    def find_in_batches2
    end
  end
end

Task.find_in_batches2 do |group|
end

ruby说:

NoMethodError: undefined method `find_in_batches2' for Task (call 'Task.connection' to establish a connection):Class
/home/yuri/.gem/ruby/2.1.5/gems/activerecord-4.2.0/lib/active_record/dynamic_matchers.rb:26:in `method_missing'
/srv/http/tm/Rakefile:15:in `<top (required)>'
/home/yuri/.gem/ruby/2.1.5/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:268:in `load'
/home/yuri/.gem/ruby/2.1.5/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:268:in `block in load'
/home/yuri/.gem/ruby/2.1.5/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:240:in `load_dependency'
/home/yuri/.gem/ruby/2.1.5/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:268:in `load'
/home/yuri/.gem/ruby/2.1.5/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:268:in `load'
/home/yuri/.gem/ruby/2.1.5/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:268:in `block in load'
/home/yuri/.gem/ruby/2.1.5/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:240:in `load_dependency'
/home/yuri/.gem/ruby/2.1.5/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:268:in `load'
-e:1:in `<main>'

然后我尝试跟随this answer,但无济于事。我做错了什么,为什么这么难?

1 个答案:

答案 0 :(得分:1)

以下是解决方案:

ActiveRecord::Batches.module_eval do
  def find_in_batches2
  end
end

ActiveRecord::Querying.module_eval do
  delegate :find_in_batches2, :to => :all
end

不要忘记实施find_in_batches2