Как переопределить метод класса ActiveRecord::Base?
Доброго времени суток. Проблема в следующем:
У меня есть много моделей, наследующихся от класса Base
Например:
class EventType < Base
...
end
класса Base выглядит так:
class Base < ActiveRecord::Base
self.abstract_class = true
...
end
У меня подключен gem will_paginate и поэтому начиная с класса ActiveRecord::Base у меня есть метод paginate
Вопрос:
мне нужно немного изменить метод paginate, при некоторых условиях мне нужно от него немного другое поведение для класса Base и соответственно всех его дочерних классов.
попытка написать так привел к ошибке при запуске приложения. You tried to define a scope named "paginate" on the model "ActiveRecord::Base", but Active Record already defined a class method with the same name. (ArgumentError)
class Base < ActiveRecord::Base
self.abstract_class = true
include ValidateLimits::Extension
ActiveRecord::Base.class_eval do
scope :paginate, lambda { |params = {}|
puts 'Hello!'
}
end
end
Решено в итоге так
config/initializers/will_paginate.rb
require 'will_paginate/active_record'
WillPaginate::ActiveRecord::Pagination.module_eval do
alias_method :old_paginate, :paginate
def paginate(options)
#mycode
end
end