在Mongoid中重新生成密钥?

时间:2011-12-21 03:51:30

标签: ruby-on-rails mongodb ruby-on-rails-3.1 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视图中,第一篇文章仍然返回其对象ID而不是新键。即使用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 ,,然后,当那些可能偶尔需要改变时?
  4. 谢谢!

1 个答案:

答案 0 :(得分:0)

好吧,因为_id是不可变的,所以你唯一的选择就是用你的新“缓慢”id重新插入这个文件并删除旧文件。

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