私たちのサイトでは、技術力の低いスタッフがコンテンツを更新できるように、refinerycmsを使用しています。gem 内には、サイトの各トップ レベル ページをマップする Page クラスがあります。この Page クラスで act_as_taggable gem を使用したいと思います。これで、acts_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
アプリ/ビュー/レイアウト/application.html.erb
...
Tags: <%= @page.tag_list %>
サーバーからページを初めてリクエストすると、ページ上のすべてのタグが正しく出力されます。ただし、更新を押すと、代わりにNoMethodError
tag_list が未定義であることを示すメッセージが表示されます。
私はレールに慣れていないので、おそらく私の仮定は間違っていますが、 Page.send への呼び出しは、クラスの特定のインスタンスではなく Page クラスに永続的な変更を加えると予想していました。では、リクエストごとにacts_as_taggableをPageクラスに追加するにはどうすればよいでしょうか?