2011-03-07 58 views
0

我爲博客(模型名稱:文章)設置了足智多謀的路線。Rails 3 - 自定義足智多謀的路線

我想自定義足智多謀路由指向

articles/show/title-of-my-article 

現在我通過這個閱讀:

http://edgeguides.rubyonrails.org/routing.html#customizing-resourceful-routes

但它似乎並沒有解釋如何覆蓋PARAMS不只是:控制器或:操作。事情是我可以做一個單一的資源或匹配的GET請求,但我想覆蓋我的足智多謀的路線,所以我仍然可以使用所有的資源助手(即article_path(@ article.title))等。

Can任何人在這裏幫助我,任何和所有的幫助非常感謝!

回答

1

你應該重寫你的模型的to_param方法:

class Article 
    def to_param 
    self.title 
    end 
end 

如果你想獲得一點點的麻煩,你應該generating custom slugs閱讀起來。

0

除了jonni的回答。

覆寫to_param方法,當你調用像article_path(@article)資源幫手,它會爲params[:id]控制器傳遞將產生冠軍。

之後,您將需要手動在文章或多或少,即而不是做

Article.find(params[:id]) 

你需要做

Article.find_by_title(params[:id]) 

我不記得了,如果是一個創建NotFound如果由於find方法沒有找到記錄而發生異常,在這種情況下,如果找到記錄,則必須手動進行檢查,如果不是爲了觸發404頁面,則自己提出異常。

這樣做的一個問題是,標題可能包含在URL中不允許或推薦的字符,因此更好的方法是根據數據庫中的標題存儲子彈並通過它查找它。

(您可以通過在模型中的過濾器會自動創建蛞蝓和title.parameterize創建)當然

最簡單的辦法是使用許多寶石和插件,已經發生的這些事情護理之一。

+0

是的我知道我必須去除標題中的所有不好的部分,以使其友好。我會寫我自己的或使用gem來操作before_save過濾器中的標題,並將該操縱的字符串保存在數據庫中的URL字段中。然後,只要覆蓋jonnii提供的to_param方法。非常感謝你們! – Ben

相關問題