Yourmind
@Yourmind
пишу говнокод в перерывах между едой и сериалами

Как переопределить метод класса 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
  • Вопрос задан
  • 131 просмотр
Пригласить эксперта
Ответы на вопрос 1
Yourmind
@Yourmind Автор вопроса
пишу говнокод в перерывах между едой и сериалами
Решено в итоге так
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
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы