在Mongoid中重新生成密钥?
问题描述:
只是想出来Mongoid的那一刻,我碰到这可能很简单,但有我在亏损的问题:在Mongoid中重新生成密钥?
我有一个非常简单的文章型号:
class Article
include Mongoid::Document
field :title, :type => String
field :content, :type => String
key :title
referenced_in :subject
validates_presence_of :title
end
我加key :title
之后我已经创建了一个测试记录。新创建的记录按预期工作,但第一篇文章(最初具有正常的mongoid对象id)表现奇怪:
在rails视图中,第一篇文章仍然返回其对象标识而不是新键。即使用link_to article.name, article
回报:
<a href="/articles/4ef150970a68b38415000003">Show</a>
...当所有的休息返回参数键,如:
<a href="/articles/other-article">Show</a>
如果我点击链接我得到“没有找到记录”。我试着在控制台中加载并保存这条记录,然后在该记录上调用article.id
确实返回了参数化的键,但它仍然在视图中显示旧的方式,并且不起作用。
所以,一对夫妇的问题:
- 这是怎么回事吗?
- 你如何解决它?
- 这种情况表明,如果你在一个mongoid模型上设置一个字段为关键字,那么你需要确定真的是,它肯定不会改变。你如何处理像使用文章的标题作为一个slu,,然后,当这些可能偶尔需要改变?
谢谢!
答
那么,因为_id
是不可变的,所以你唯一的选择是重新插入这个文件与你新的'呆滞'的ID并删除旧的。
是的,_id格式和分片键(如果你使用分片)是你从一开始就有的两件事情:-) 其他所有东西都可以相对容易地修复。
那么,你将如何在Mongoid中设置“slugs”,这样你就可以拥有人性化的URL,但是如果有人需要更改逻辑上属于URL的一个字段(因此也是关键字) ? – Andrew 2011-12-21 04:58:50
@Andrew我个人会离开'_id',并且可以通过'slug'字段(它将具有唯一的索引)来查找文章。 – 2011-12-21 05:06:48