Я пытаюсь написать плагин, который псевдонимы некоторые методы ActiveRecord в следующей манере:методы Aliasing ActiveRecord внутри плагина
class Foo < ActiveRecord::Base
include MyOwnPlugin
acts_as_my_own_plugin :methods => [:bar]
def bar
puts 'do something'
end
end
Внутри плагина:
module MyOwnPlugin
def self.included(base)
base.class_eval do
extend ClassMethods
end
end
module ClassMethods
def acts_as_my_own_plugin(options)
options[:methods].each do |m|
self.class_eval <<-END
alias_method :origin_#{m}, :#{m}
END
end
end
end
end
Этот подход не будет потому что, когда запускается #acts_as_my_own_plugin, Foo # bar еще не определен, поскольку он не был запущен.
положить acts_as_my_own_plugin: методы => [: бар] ПОСЛЕ бар объявление функции будет работать. Однако это некрасиво.
Я хочу, чтобы action_as_my_own_plugin помещался поверх определения класса, как это делают большинство плагинов.
Есть ли альтернативный подход для удовлетворения этого состояния?
Где вы можете добавить свой модуль в ActiveRecord :: Base? Не могли бы вы также опубликовать этот код? Спасибо. –
Извините за то, что вы ленивы, lol ... Я изменил свое сообщение, чтобы задать ваши вопросы –