假设我的has_many关联中的name
有唯一性约束。这意味着我不需要将丑陋的数字序列添加到冲突的slu。中。
作为一个例子,2个slugs可能在game
db中得到同一个名字来自2个不同的人,他们有一个叫做“卡片”的游戏。 /person/1/games/cards
和person/2/games/cards
这些是2个不同的网址,但第二个网站上的slug看起来像person/2/game/cards2bc08962-b3dd-4f29-b2e6-244710c86106
。人对他们的游戏名称有一个名称唯一性约束,所以他们不能有2个名为“卡片”的游戏。它会停止生成同一个slug中的2个。
问题是游戏的名称都在一个db中排序,因此冲突的slu will将在不需要时添加数字序列,因此url变得不必要地丑陋。
希望我理解为什么这么做。
反正。如何阻止数字序列被添加到冲突的slu ??中?
答案 0 :(得分:4)
class Card
friendly_id :name, :use => :scoped, :scope => [:person]
end
答案 1 :(得分:2)
要添加到接受的答案,还有slug_candidates
方法:
#app/models/card.rb
class Card < ActiveRecord::Base
extend FriendlyId
friendly_id :slug_candidates, use: :slugged
def slug_candidates
[
:name,
[:name, :person_id]
]
end
end
以上将创建:
#url.com/players/1/games/cards
#url.com/players/2/games/cards-2
虽然不如scoped
那么好,但它会为您提供其他实现的选项。