我在我们的站点中使用了refinerycms来让技术含量较低的人员更新内容。在 gem 中,他们有一个 Page 类,用于映射站点上的每个顶级页面。我想在这个 Page 类上使用acts_as_taggable gem。现在我可以将acts_as_taggle 声明直接添加到page.rb 文件中,但是我必须维护一个单独的git repo 来跟踪我的版本和正式版本之间的差异。
基于 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
配置/初始化程序/pants.rb
require 'page_extensions'
Page.send :include, Pants::Extensions::Page
应用程序/视图/布局/application.html.erb
...
Tags: <%= @page.tag_list %>
我第一次从服务器请求页面时,它会正确输出页面上的所有标签。但是,如果我点击刷新,我会得到一个NoMethodError
指示 tag_list 未定义。
我是 Rails 新手,所以也许我的假设是错误的,但我预计对 Page.send 的调用会对 Page 类而不是对类的特定实例进行永久性更改。那么如何在每个请求上将acts_as_taggable 添加到 Page 类中呢?