2012-09-17 41 views
0

目前我正在學習Ruby on Rails的3.0自定義URL路由在Ruby on Rails的

我創建了一個職位表列名爲友好

而不是使用/後/的:ID我想用/後/:友好

意味着一個URL看起來像/後/標題後,而不是/職位/ 1

我有這個代碼正確陷害控制器。

def show 
    @post = Post.find(params[:friendly]) 

    respond_to do |format| 
    format.html 
    format.json { render :json => @post } 
    end 
end 

但我不知道如何更改routes.rb來實現此更改。

現在它只是說,在您的幫助

resources :post 

感謝。

+0

你爲什麼要這麼做?通過調用您的ID列友好有什麼好處? –

+0

我更新了這篇文章,以更好地解釋我希望網址看起來像/ post/post-title而不是/ post/1 –

+0

這是通常爲SEO和整體更好的用戶體驗所做的。 – iouri

回答

3

您可以使用to_param方法對模型http://apidock.com/rails/ActiveRecord/Base/to_param

如果你把對象ID的友好,前1 - 一些名之內,2-一些,其他的名稱,你就不必做任何事情。 Rails會從字符串中去掉id並用它來找到你的對象。如果你不這樣做,你將不得不改變你的控制器使用find_by_friendly(params [:id])而不是find(params [:id])

另一種選擇是使用像https://github.com/norman/friendly_id這樣的gem來實現這一點。

0

如果你想改變查找ID變量的格式,你可以改變路線如下

resources :post, :except => find do 
    # Change the find to accept an id that's alphanumeric, but you can change 
    # this regex to whatever you need. 
    get 'find', :on => :member, :constraints => { :id => /[a-zA-Z]*/ } 
end 

話,要獲得職位後#發現,你需要做的

Post.find_by_friendly(Params[:id]) 

的一個問題是,這將打破助手路徑 - 例如post_path(@post)需要成爲post_path(:id => @post.friendly)

http://guides.rubyonrails.org/routing.html#http-verb-constraints