Я хотел бы создать слаги URL-адресов для тегов, управляемых драгоценным камнем acts_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.
Я бы предпочел не разветвлять драгоценный камень и не настраивать его, если есть способ сделать это с помощью моего собственного кода приложения. Спасибо.