Создание ярлыков URL-адресов для тегов с помощью actions_as_taggable_on

Я хотел бы создать Заголовки URL-адресов для тегов, управляемых гемом actions_as_taggable_on. Например, вместо URL-адресов типа http://myapp.com/tags/5 я хотел бы иметь http://myapp.com/ tags / my-tag (где «мой тег» - это уникальное имя тега).

В моделях, которые я создаю сам, я обычно делаю это путем переопределения метода to_param модели и создания «slug» в модели, чтобы сохранить результат нового метода to_param. Я попытался сделать это с моделью тегов ActsAsTaggableOn, но она не работает.

В противном случае я могу переопределить вещи в классе tag.rb ActsAsTaggableOn следующим образом:

# 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 по-прежнему генерирует маршруты и отвечает на них с целыми идентификаторами, а не с параметризованным именем. Фактически, в консоли, если я попробую что-то вроде

ActsAsTaggableOn::Tag.find(1).to_param

Целочисленный идентификатор будет возвращен, а не результат переопределенного метода to_param.

Я бы предпочел не форкнуть гем и не настраивать его, если есть какой-то способ делаю это с моим собственным кодом приложения. Спасибо.

8
задан Jamie Forrest 13 February 2011 в 05:21
поделиться