2017-01-02 55 views
0

我们如何获得活动记录来创建更多不仅仅是自然数(1,2,3 ...)的复杂ID。我不确定我是否应该使用数据库ID来识别对象,但是现在,在生产中让他们这样做会非常不安全。更强大的活动记录ID

+1

也许像'slug'会有帮助吗?您可以继续使用'id'作为主键,但对于其他所有内容使用另一列。所以,你们所要做的只是产生一个独特的'slug'来识别这个对象,并停止使用'id'来公开所有的东西。 – amree

+0

@amree所以一个slu basically基本上映射到一个ID号码?如果你不介意,你能提供一个例子吗? – Carpetfizz

+1

你是什么意思“相当不安全”? –

回答

1

让我们只是说你想要使用一个名为slug的列作为名为Post的对象。

  • 该表
  • 创建Post模型before_create方法,将保存记录之前,生成唯一slug值创建slug列。也许做一些检查,以确保它是唯一的
  • 替换任何公开使用Post.find_by(slug: id)而不是Post.find(id)
  • 确保任何网址生成将使用这样的:post_path(id: post.slug),这样它就不会把id的URL。