目前,我有我的分頁模型如下設置:/pages/6-about
用戶友好的URL
class Page < ActiveRecord::Base
def to_param
"#{id}-#{permalink}"
end
end
我想的網址是/pages/about
。什麼是最好的解決方案?提前致謝。
目前,我有我的分頁模型如下設置:/pages/6-about
用戶友好的URL
class Page < ActiveRecord::Base
def to_param
"#{id}-#{permalink}"
end
end
我想的網址是/pages/about
。什麼是最好的解決方案?提前致謝。
關於你的問題沒有太多的信息。 有幾條途徑可以做到這一點,但這一切都取決於你在做什麼。
如果頁面數量是固定的,您可以保留一個靜態哈希表,記錄名稱< - > 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。
如果您的頁面是動態的並且從數據庫加載,那麼您需要在數據庫上有一個表格,該表格爲您提供了一個名稱。你可以通過名稱索引表,並且查詢應該很快。 如果你想減少對數據庫的訪問次數,你可以使用併發字典來實現一個(非常複雜的)緩存系統。
編輯 -
的信息來恢復ID必須大於或等於所需的量,信息量ID字段可存儲:)
我的意思是......
如果固定鏈接並不是唯一的,你無法從中獲得一個id。
如果永久鏈接字段是唯一的,它與ID相同,它是一個字符串ID。 然後,您可以編寫一個查詢,給定永久鏈接將返回給您一個ID。
如果你可以從一個獨特的幾個字段,例如,永久和fieldX恢復的ID,您可以編寫一個查詢,其中固定鏈接=「約」 AND fieldX =「XXX」
所以你改變你的
def to_param
permalink
end
,然後實現一個
def self.from_param(value)
find_by_permalink(value)
end
在你的頁面模型
。
在你的控制器,你會再需要
def show
@page = Page.from_param(params[:id])
...
end
嗨感謝您的快速響應。抱歉沒有添加額外的信息,我認爲它位於to_param的設置。 頁面內容來自DB 以下字段 - ID,標題,永久鏈接,主體 – user964900