2012-07-06 116 views
4

在我的路線文件,我可以很容易地放在一起比賽,看起來像這樣和工作在這個工程是Rails的配合蛞蝓路線沒有鏈接使用ID

視圖就好

match '/:slug/:id' => "pages#show", :id => :id 

鏈接

link_to n.name, "/" + n.slug + "/" + n.id.to_s 

我不想在URL中包含的ID號,所以我希望做這樣的事情

match '/:slug' => "pages#show", :slug => :slug 

但問題是,這不會提供ID到頁面顯示控制器。是否有某種方式使用:slug將其與數據庫中的頁面匹配,以找到:id,這樣我就可以將ID傳遞給控制器​​了?

回答

6

在你的路由使用

match "/:slug" => "pages#show" 

而在你的控制器使用此

@page = Page.find_by_slug(params[:slug]) 
1

你也可以做到這一點決高下找到頁:

resources :pages, only: :show, param: :slug 

這將產生

頁GET /pages/:slug/(.:format)頁#表明

我爲了能夠使用這個助手是這樣的:page_path(page),在頁面的Page一個實例,你還需要覆蓋to_param方法,如下所示:

def to_param 
    slug 
end