FriendlyID 包括一个 Reserved 模块,它可以防止提供的单词列表被用作友好的 slug。您可以将静态路由添加到保留字数组中,以防止有人覆盖您的路由。
来自 FriendlyId RDocs
FriendlyId.defaults do |config|
config.use :reserved
# Reserve words for English and Spanish URLs
config.reserved_words = %w(new edit nueva nuevo editar)
end
如果您仍然希望保留一个标题,您可以创建一个 FriendlyId 用于 slug 的新方法。RDocs 的这篇文章解释说
列还是方法?
FriendlyId 始终使用方法作为 slug 文本的基础 - 而不是列。乍一看,这可能听起来令人困惑,但请记住,Active Record 为模型关联表中的每一列提供方法,这就是 FriendlyId 使用的。
下面是一个使用自定义方法生成 slug 的类的示例:
class Person < ActiveRecord::Base
friendly_id :name_and_location
def name_and_location
"#{name} from #{location}"
end
end
bob = Person.create! :name => "Bob Smith", :location => "New York City"
bob.friendly_id #=> "bob-smith-from-new-york-city"
您可以创建一个类似:title_with_id
or的方法:title_with_rand
。这取决于您以及您希望蛞蝓的外观。
您还需要确保在routes.rb
具有友好 ID 的路由之前列出您的静态路由。第一个路由调度程序匹配的是请求将被处理的地方。