首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何阻止友好的id生成一个数字序列来区分冲突的段塞?

如何阻止友好的id生成一个数字序列来区分冲突的段塞?
EN

Stack Overflow用户
提问于 2016-02-15 08:42:13
回答 2查看 269关注 0票数 0

假设我在name的has_many关联中有一个唯一性约束。这意味着我不需要丑陋的数字序列添加到冲突的子弹。

举个例子,在一个game db中,有两个不同的人的名字可能是相同的:/person/1/games/cardsperson/2/games/cards --这是两个不同的URL,但是第二个片段看起来像person/2/game/cards2bc08962-b3dd-4f29-b2e6-244710c86106。人有一个名称唯一性约束,他们的游戏名称,所以他们不能有2个游戏,称为‘卡片’,这将阻止2个相同的鼻涕虫生成。

问题是游戏的名称都是在一个db中排序的,所以冲突的段塞在不需要的时候会添加数字序列,所以urls变得不必要的丑陋。

希望这能解释我为什么想要它。

不管怎么说。怎样才能阻止数字序列被添加到冲突的子弹中?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-15 09:08:29

使用作用域功能

代码语言:javascript
运行
复制
class Card
   friendly_id :name, :use => :scoped, :scope => [:person]
end
票数 4
EN

Stack Overflow用户

发布于 2016-02-15 10:42:18

要添加接受的答案,还有一个slug_candidates方法:

代码语言:javascript
运行
复制
#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

以上所述将产生:

代码语言:javascript
运行
复制
#url.com/players/1/games/cards
#url.com/players/2/games/cards-2

虽然在满足您的需要方面不如scoped,但它将为您提供其他实现的一些选项。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35404784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档