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