Acts_as_taggable_ongemによって管理されるタグのurlスラッグを作成したいと思います。たとえば、http://myapp.com/tags/5のようなURLの代わりに、http ://myapp.com/tags/my-tag(「mytag」はタグの一意の名前)が必要です。
自分で作成するモデルでは、通常、モデルのto_paramメソッドをオーバーライドし、モデルに「slug」フィールドを作成して、新しいto_paramメソッドの結果を保存します。ActsAsTaggableOnのタグモデルでこれを実行しようとしましたが、機能しません。
それ以外の場合は、ActsAsTaggableOnのtag.rbクラスにあるものを次のようにオーバーライドできます。
# Overwrite tag class
ActsAsTaggableOn::Tag.class_eval do
def name
n = read_attribute(:name).split
n.each {|word| word.capitalize!}.join(" ")
end
end
ただし、同じブロックのto_paramメソッドを次のようなメソッド定義でオーバーライドしようとすると、次のようになります。
def to_param
name.parameterize
end
Railsは、パラメーター化された名前ではなく整数IDのルートを生成して応答します。実際、コンソールで次のようなことを試してみると
ActsAsTaggableOn::Tag.find(1).to_param
オーバーライドされたto_paramメソッドの結果ではなく、整数IDが返されます。
自分のアプリケーションコードでそれを実行できる方法があれば、gemをフォークしてカスタマイズしたくありません。ありがとう。