【发布时间】:2010-10-25 20:44:43
【问题描述】:
我在我们的网站中使用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
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 未定义。
我是 Rails 新手,所以也许我的假设是错误的,但我希望调用 Page.send 会对 Page 类而不是类的特定实例进行永久性更改。那么如何在每个请求中将acts_as_taggable 添加到 Page 类中呢?
【问题讨论】:
-
请将其重新标记为“refinerycms”,谢谢。
标签: ruby metaprogramming refinerycms