【问题标题】:Regenerate keys in Mongoid?在 Mongoid 中重新生成密钥?
【发布时间】:2011-12-21 03:51:30
【问题描述】:

目前只是在尝试 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 模型上的字段设置为键,您需要真正确保它永远不会改变。您如何处理诸如使用文章标题之类的问题,然后,当这些可能偶尔需要更改时?

谢谢!

【问题讨论】:

    标签: ruby-on-rails mongodb ruby-on-rails-3.1 mongoid


    【解决方案1】:

    好吧,由于_id 是不可变的,您唯一的选择是使用新的“缓慢”ID 重新插入此文档并删除旧的。

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

    【讨论】:

    • 那么,你将如何在 Mongoid 中设置“slugs”,这样如果有人需要更改逻辑上属于 URL 一部分的字段(以及因此,关键)?
    • @Andrew 我个人会不理会_id,并且可以通过slug 字段(具有唯一索引)查找文章。
    猜你喜欢
    • 2016-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多