我想为acts_as_taggable_on gem 管理的标签创建url slug。例如,而不是像http://myapp.com/tags/5这样的网址,我想要http://myapp.com/tags/my-tag(其中“我的标签”是标签的唯一名称)。
在我自己创建的模型中,我通常通过覆盖模型的 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
返回整数 ID,而不是重写的 to_param 方法的结果。
如果有任何方法可以使用我自己的应用程序代码来完成,我宁愿不分叉 gem 并对其进行自定义。谢谢。