2010-02-15 179 views
6

我正在構建一個Rails應用程序,我想堅持所有那些奇特的東西,如REST和資源,但我想自定義我的路線。我希望我的GET路線更加冗長 - 我創建的應用程序是一個簡單的博客,所以我不喜歡GET /posts/1,我喜歡GET /posts/1-my-first-post之類的東西。Rails路由 - 資源的自定義路由

任何想法如何做到這一點?沒有在網上找到任何東西。

回答

4

在模型中定義to_param方法,所有的網址助手將憂色你與該方法返回的內容,如:

class Post < ActiveRecord::Base 
    der to_param 
    slug 
    end 
end 

你也需要去適應你的控制器,用於那。替換:

Post.find(params[:id]) 

有:

Post.find_by_slug(params[:id]) 

還要注意的是找到方法引發的ActiveRecord :: RecordNotFound異常,當同時使用find_by_ *方法不存在例外情況,從而提高了記錄無法找到你需要手動檢查。

0

或者......

添加這樣的方法來application_helper.rb

def permalink(post) 
    "#{post_path(post)}-#{post.slug}" 
end 

然後使用你的意見以下(使用permalink(@post)代替post_path

<%= link_to @post.title, permalink(@post) %> 
0

或者.. 。

添加這樣的方法來post.rb

def path 
    "/posts/#{id}-#{slug}" 
end 

然後使用按照您的看法:

2

你可以找到friendly_id插件有用,因爲它也將處理重定向,如果您重新命名蛞蝓(因此搜索引擎友好),處理名稱衝突並無縫集成find方法,因此您不需要觸摸控制器方法(除重定向之外)。