2011-12-21 82 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