Как я могу перезаписать существующий метод экземпляра из модуля в Ruby? - PullRequest
2 голосов
/ 19 ноября 2010

Я знаю, что могу добавлять новые методы в модели, но я не могу перезаписать существующий метод. Вот что у меня есть

В моем User.rb

include ExtraMethods
def is_invisible?
  true unless self.active?
end

В моем модуле

module ExtraMethods
  def self.included(base)
    base.extend(ClassMethods)
  end

  module ClassMethods
    def user_extra_methods
      include ExtraMethods::InstanceMethods
    end
  end
  module InstanceMethods
    def is_invisible?
      true unless self.active? || self.admin?
    end
  end
end

ActiveRecord::Base.send(:include, ExtraMethods)
User.send(:user_extra_methods)

Я хочу, чтобы метод в плагине переопределил метод в модели. Любые мысли или ссылки были бы хорошими, не могу найти хорошую ссылку для этого.

спасибо!

J

1 Ответ

1 голос
/ 19 ноября 2010

Порядок, в котором вы объявляете членов класса, важен.

Вы выполняете плагин include до self.active? объявлен метод ... Объявление модели всегда будет иметь приоритет, так как оно было объявлено позже.

Вам придется прибегнуть к чему-то вроде этого:

http://weblog.rubyonrails.org/2006/4/26/new-in-rails-module-alias_method_chain

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...