2009-09-05 59 views
2

我創建的模型對象從產生的支架,但現在我想的,而不是鏈接到
/:控制器/:ID(/對象名/ 1)/ :controller /:title(/ objectname/new_blog_post)。我如何做到這一點,以便鏈接將鏈接到標題,而不是ID?Ruby on Rails的:URL從IDS到名稱/職稱等

我想從去:

/:controller/:id 

/:controller/:name 

回答

4

使用PARAM

class User < ActiveRecord::Base 

    def to_param 
    name.blank? ? id : name 
    end 

end 

或者尋找到一個插件,acts_as_sluggable和friendly_id是那些我所知道的。

編輯:哦,是的,並提到您確認任何你使用是獨一無二的。

編輯:之後你

<% @users.each do |user| %> 
    <%= link_to user.name, user_path(@user.id) %> 
<% end %> 

而且如果用戶名是約翰那麼它將使/用戶/約翰:

它的工作,如:

class UsersController < ActionController::Base 

    def index 
    @users = User.all 
    end 

end 

鑑於點擊該鏈接

+0

+1你知道,我從來沒有重寫'to_param'。也許我應該開始這樣做。 – theIV

+0

其實,再看一遍,這會是一個好主意嗎?如果名字是空白的,他的發現在控制器中會是什麼樣子? – theIV

+0

它仍然可以找到一個id,如果沒有名字,檢查它是否將id作爲url。它沒有經過測試,但它展示了它的一個基本想法。 – nitecoder

1

你需要改變一些東西:

你必須在title屬性傳遞給任何路徑/ URL時,你做的東西一樣link_to例如

post_path(@post) 

將成爲

post_path(@post.title) 

您還可以更新您的發現,尋找通過標題的帖子,而不是ID例如

@post = Post.find(params[:id]) 

將成爲

@post = Post.find_by_title(params[:title]) 

這應該讓你開始:)。您顯然想要扼殺標題並驗證標題的唯一性。

編輯:閱讀羅伯特·埃爾韋爾的回答之後,也許我誤解了這個問題。你是否已經有了一種類似於你描述的特定對象的路線,或者你是否正在用「基本」路線來做這件事?如果是後者,你可以更好地寫出像羅伯特所建議的自定義路線,然後做一些我建議的東西。

0

使用friendly_id。

BTW,產生的URL是不是爲我工作。我已經寫了我自己的模型

def to_param 
    self.friendly_id 
end 
相關問題