Дополнение модели из внешнего камня

Я использую refinerycms на нашем сайте, чтобы позволить менее техническому персоналу обновлять контент. Внутри драгоценного камня у них есть класс Page, который отображает каждую страницу верхнего уровня на сайте. Я хотел бы использовать гем actions_as_taggable в этом классе Page. Теперь я могу добавить объявление act_as_taggle непосредственно в файл page.rb, но тогда мне пришлось бы поддерживать отдельный репозиторий git, чтобы отслеживать различия между моей версией и официальным выпуском.

Основываясь на некоторых других вопросах здесь, о SO, я создал инициализатор и расширение, например:

lib / page_extensions.rb:

module Pants
  module Extensions

    module Page
      module ClassMethods
        def add_taggable
          acts_as_taggable
        end
      end

      def self.included(base)
        base.extend(ClassMethods).add_taggable
      end

    end

  end
end

config / initializers / pants.rb

require 'page_extensions'

Page.send :include, Pants::Extensions::Page

app / views / layouts / application. html.erb

...
Tags: <%= @page.tag_list %>

В первый раз, когда я запрашиваю страницу с сервера, он правильно выводит все теги на странице. Однако, если я нажимаю кнопку «Обновить», я вместо этого получаю NoMethodError , указывающий, что tag_list не определен.

Я новичок в рельсах, поэтому, возможно, мои предположения ошибочны, но я ожидал этого звонка Пейджу. send внесет постоянное изменение в класс Page, а не в конкретный экземпляр класса. Итак, как я могу добавить к классу Page при каждом запросе файл actions_as_taggable?

6
задан Arsen7 25 March 2011 в 13:22
поделиться