Я использую 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?