2011-12-21 5 views
0

が、私はおそらく非常に単純ですが、ロスで私を持って問題に遭遇しました:モンゴイドのキーを再生成しますか?ただ、現時点ではMongoidを試し

私は本当に簡単Articleモデルを持っている:

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を追加しました私はすでに1つのテスト記録を作成した後です。新しく作成されたレコードは期待どおりに動作しますが、最初の記事(最初は正常なモンゴイドオブジェクトIDを持っていました)は奇妙な動作をします:

この最初の記事では、新しいキーではなくオブジェクトIDが返されます。すべての残りの部分がパラメータ化キーを返すときのように、...

<a href="/articles/4ef150970a68b38415000003">Show</a> 

::私は「見つからない記録」を得るというリンクをクリックした場合

<a href="/articles/other-article">Show</a> 

すなわちlink_to article.name, articleリターンを使用。このレコードをコンソールにロードして再保存しようとしましたが、そのレコードのarticle.idを呼び出すと、パラメータ化されたキーが返されましたが、それでもビューの古い方法が表示されて動作しません。だから、

、カップルの質問:

  1. ここで何が起こっていますか?
  2. どのように修正しますか?
  3. この状況では、モンゴイダルモデルのフィールドをキーに設定すると、という実際にはに変更されないことを確認する必要があります。記事のタイトルをスラッグとして使用するようなことをどうやって処理しますか?時には変更が必要な場合があります。

ありがとう!

答えて

0

まあ、_idは不変なので、あなたの唯一の選択肢は、あなたの新しい「ゆっくり」のIDでこの文書を再挿入し、古いものを削除することです。

はい、_idフォーマットとシャードキー(シャーディングを使用している場合)は、最初から正しい方が良いでしょう:-) 他のすべては比較的簡単に修正できます。

+0

それで、Mongoidで「スラッグ」を設定すると、人にやさしいURLを持つことができますが、論理的にURLの一部であるフィールド(つまりキー)を変更する必要がある場合は、 ? – Andrew

+1

@Andrew私は個人的に '_id'だけを残し、' slug'フィールド(これはユニークなインデックスを持つでしょう)によっても記事を見つけることを可能にします。 –

関連する問題