【发布时间】:2010-06-28 15:57:45
【问题描述】:
在这个简化的场景中,我有一个名为 Post 的模型
每个帖子都有一个标题和一个固定链接
网址中使用了永久链接 - 即http://mysite.com/blog/permalink
在创建帖子之前,回调将永久链接设置为与标题相同
我验证了每个标题的唯一性,但我没有明确验证永久链接的唯一性,原因有以下三个:
- 永久链接等于标题,该标题已经过唯一性验证
- 用户对永久链接一无所知,因为他们从来没有被要求输入一个,所以当他们收到一个错误告诉他们永久链接必须是唯一的时,他们不知道这意味着什么
- 我在 ORM 中使用 mongoid,永久链接是每个帖子的关键,mongoid 似乎不允许你修改关键
现在想象以下场景:
用户创建了一个标题为“hello”的帖子,网址为http://mysite.com/blog/hello
用户将标题更改为“再见”,但永久链接保持不变,因为它在设计上是不可变的。这很好,这是我想要的,有助于防止链接失效。
然后用户创建了一个名为“hello”的新帖子,它不会通过验证,因为我们已经更改了第一个帖子的标题
这里的问题是,由于我们的 before_create 回调,我们现在有两个具有相同 url 的帖子。
正如我所说,我不想验证固定链接的唯一性,因为上述 scanrio 中的用户在创建第二个帖子时会收到“固定链接必须是唯一的”错误,我只知道这会让他们感到困惑
所以我在想,是否有一种验证或一种技术可以让我阻止用户创建标题与现有永久链接相同的帖子?
如果一切都失败了,那么我将验证永久链接的唯一性,并写出一个非常冗长的验证错误消息,详细说明永久链接是什么,以及为什么这个链接不被认为是唯一的
我们在制作网站时必须考虑的东西,什么是随身携带
【问题讨论】:
标签: ruby-on-rails