1

是否可以为rails 上的文章创建一些唯一的ID?例如,第一篇文章将获得 ID - aa-001,第二篇 - aa-002 ... 文章#999 - aa-999,文章#1000 - ab-001 等等?

在此先感谢您的帮助!

4

2 回答 2

2

以下方法给出序列中的下一个 id,给定之前的一个:

def next_id(id, limit = 3, seperator = '-')
  if id[/[0-9]+\z/] == ?9 * limit
    "#{id[/\A[a-z]+/i].next}#{seperator}#{?0 * (limit - 1)}1"
  else
    id.next
  end
end

> next_id("aa-009")
=> "aa-010"
> next_id("aa-999")
=> "ab-001"

limit 参数指定位数。您可以使用任意数量的前缀字符。

这意味着您可以在应用程序中像这样使用它:

> Post.last.special_id
=> "bc-999"
next_id(Post.last.special_id)
=> "bd-001"

但是,我不确定我是否会建议您这样做。数据库具有智能方法来避免在同时创建条目时创建 id 的竞争条件。例如,在 Postgres 中,它不保证无间隙 id。

这种方法没有这样的机制,这可能会导致竞争条件。但是,如果在您是唯一写文章的人的情况下这种情况极不可能发生,那么您无论如何都可以这样做。我不确定你想用这个做什么,但你可能想看看to_param

于 2013-05-25T10:15:20.970 回答
1

您可能想查看FriendlyId gem。还有一个关于这个主题的 Railscast,它涵盖了手动方法以及 FriendlyId 的使用。

于 2013-05-25T13:21:54.173 回答