2011-12-21 78 views
0

只是想出来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确实返回了参数化的键,但它仍然在视图中显示旧的方式,并且不起作用。

所以,一对夫妇的问题:

  1. 这是怎么回事吗?
  2. 你如何解决它?
  3. 这种情况表明,如果你在一个mongoid模型上设置一个字段为关键字,那么你需要确定真的是,它肯定不会改变。你如何处理像使用文章的标题作为一个slu,,然后,当这些可能偶尔需要改变?

谢谢!

回答

0

那么,因为_id是不可变的,所以你唯一的选择是重新插入这个文件与你新的'呆滞'的ID并删除旧的。

是的,_id格式和分片键(如果你使用分片)是你从一开始就有的两件事情:-) 其他所有东西都可以相对容易地修复。

+0

那么,你将如何在Mongoid中设置“slugs”,这样你就可以拥有人性化的URL,但是如果有人需要更改逻辑上属于URL的一个字段(因此也是关键字) ? – Andrew 2011-12-21 04:58:50

+1

@Andrew我个人会离开'_id',并且可以通过'slug'字段(它将具有唯一的索引)来查找文章。 – 2011-12-21 05:06:48