Вы можете запустить генератор плагинов, чтобы начать.
script/generate plugin acts_as_page
Затем вы можете добавить модуль, который определяет acts_as_page
и распространяет его на все модели.
# in plugins/acts_as_page/lib/acts_as_page.rb
module ActsAsPage
def acts_as_page
# ...
end
end
# in plugins/acts_as_page/init.rb
class ActiveRecord::Base
extend ActsAsPage
end
Таким образом метод act_as_page доступен как метод класса для всех моделей, и вы можете определить любое поведение в нем. Вы могли бы сделать что-то вроде этого ...
module ActsAsPage
def acts_as_page
attr_writer :title, :permalink
include Behavior
end
module Behavior
def title
# ...
end
def permalink
# ...
end
end
end
А потом, когда вы вызываете acts_as_page в модели ...
class Article < ActiveRecord::Base
acts_as_page
end
Он определит атрибуты и добавит методы. Если вам нужны более динамичные вещи (например, если вы хотите, чтобы метод acts_as_page
принимал аргументы, изменяющие поведение), попробуйте решение, которое я представляю в в этом эпизоде Railscasts .