2014-02-14 73 views
0

我想創建PARAM /users/will-smith,所以這裏是我的代碼:Rails的to_param - 如果沒有ID

def to_param 
    "#{full_name.parameterize}" 
end 

參數化將其轉換「威爾·史密斯」到「將史密斯」

所以在控制器中, PARAM將不匹配find聲明,從而返回nil

# User with full_name "will-smith" not found 
@user = User.find_by_full_name(params[:id]) 

大多數我找到了解決辦法是通過改變參數去#{id}-#{full_name.parameterize}。但我不希望URL包含該ID。

其他解決方案是在數據庫中添加permalink列,我不太喜歡這個列。

任何其他解決方案?

感謝

+2

使用友好標識... – apneadiving

+0

看起來不錯,但沒有第三方插件沒有簡單的解決方案?如果沒有簡單的方法,那麼我將使用該插件 – hrsetyono

+1

使用friendly_id是實現此功能的最簡單方法。 – RSB

回答

2

這裏有一個叫做FriendlyId寶石。它會給你更多的選擇來玩。

您的代碼存在的問題是,您需要將該參數轉換回原始,或在搜索過程中對列使用相同種類的轉換。 FriendlyId基本上可以幫助你達到同樣的效果。

另外,我不確定,但您可能會錯過gist。它包含有關該主題的大量信息。