是否可以为rails 上的文章创建一些唯一的ID?例如,第一篇文章将获得 ID - aa-001,第二篇 - aa-002 ... 文章#999 - aa-999,文章#1000 - ab-001 等等?
在此先感谢您的帮助!
是否可以为rails 上的文章创建一些唯一的ID?例如,第一篇文章将获得 ID - aa-001,第二篇 - aa-002 ... 文章#999 - aa-999,文章#1000 - ab-001 等等?
在此先感谢您的帮助!
以下方法给出序列中的下一个 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。
您可能想查看FriendlyId gem。还有一个关于这个主题的 Railscast,它涵盖了手动方法以及 FriendlyId 的使用。