2011-10-21 6 views

答えて

0

質問にはあまり情報はありません。 これを行うにはいくつかのルートがありますが、それはすべてあなたが何をしているかによって異なります。

ページ数が固定されている場合は、名前< - > idを追跡する静的ハッシュテーブルをそのまま使用できます。

private static readonly Dictionary<string, int> PagesDict = new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase) { { "about", 6 }, { "home", 1 }, { "xxx", 2 } }; 

///<summary>Gets a page id by a string name. Returns -1 if page doesn't exists.</summary> 
public static int GetPageId(string name) 
{ 
    int result; 
    if (!PagesDict.TeyGetValue(name, out result)) 
     return -1; 
    return result; 
} 

あなたの代わりに読み書き辞書が必要な場合は、ConcurrentDictionaryを使用することができますが、もちろん、この辞書はどこにも保存されていないと辞書はDBテーブルのようなものからロードされていない場合、紛失したりしますXML。

ページが動的であり、DBからロードされている場合は、IDをIDで指定するテーブルが必要です。テーブルを名前でインデックス化することができ、クエリは非常に高速になるはずです。 DB上のアクセス数を減らしたい場合は、並行辞書を使用する(かなり複雑な)キャッシュシステムを実装することができます。

編集 -

IDを復元するために必要な情報の量が大きくなるか、IDフィールドが格納できる情報量が等しくなければならない:)

私は意味...

パーマリンクする場合一意ではないので、そこからIDを取得する方法はありません。

permalinkフィールドが一意の場合は、IDと同じものです。文字列IDです。 次に、パーマリンクがあなたにIDを返すというクエリを書くことができます。

あなたはフィールドのユニークなカップルからIDを復元することができた場合は、例えば、パーマリンクやfieldX、あなたは「約」パーマリンク=クエリを記述することができ、fieldX =「XXX」

+0

こんにちは感謝が必要になります。私はそれがto_paramの設定にあると思った余分な情報を追加しないと申し訳ありません。 ページのコンテンツはDBから来ています 以下のフィールド - ID、タイトル、パーマリンク、本文 – user964900

1

つまり、あなたの

を変更
def to_param 
    permalink 
end 

そして、あなたのページのモデルで

def self.from_param(value) 
    find_by_permalink(value) 
end 

を実装します。お使いのコントローラで

あなたは、迅速な対応のために

def show 
    @page = Page.from_param(params[:id]) 
    ... 
end 
関連する問題