2012-01-13 41 views
0

在我的Rails 3應用程序中,我有一個名爲User的模型,其中包含id和username,兩者都是索引和唯一的。在某處的一些看法我有以下幾點:Rails和SEF URL:更改link_to中使用的密鑰以使用不同的字段,然後使用主鍵

<%= link_to 'Show this user', user %> 

這就產生了這樣一個環節:

<a href="https://stackoverflow.com/users/980190962">Show this user</a> 

其中那個可怕的數字是id(主鍵)。現在,對於網站的SEFness,我想使用用戶名而不是id,無論我使用link_to「...」,用戶,但僅限於該用戶模型。將參數添加到link_to並沒有幫助,因爲我已經在很多地方使用了它(並且我不想在任何地方都添加其他參數)。

我該如何重寫僅適用於一個模型的link_to helper的行爲?


下面是對這個問題的完整答案,正如我從接受的答案中扣除的。我添加下面我的用戶模型:

def to_param # overridden to use username as id, and not the id. More SEF. 
    username 
end 
def self.find(id) 
    @user = User.find_by_id(id) 
    @user = User.find_by_username(id) if @user == nil 
    throw ActiveRecord.RecordNotFound.new if @user == nil 
    @user 
end 

這使得現在的link_to與生成的所有環節使用的用戶名,同時發現將嘗試都ID和用戶名,使得它也向後兼容。

認爲像我這樣對Rails陌生的人會覺得這很有用。

回答

2

不確定我在說什麼,但在你的模型中重寫#to_param可能是你正在尋找的。

+0

http://api.rubyonrails.org/classes/ActiveRecord/Base.html#method-i-to_param – glortho 2012-01-13 16:25:59

+1

@Katen:你似乎知道你在說什麼。爲了完成你的答案:我需要做'def to_param // username //在模型中結束,然後在控制器中用'User.find_by_id(params [:id])'替換所有'User.find'' 。現在我需要遵循模型的查找方法,當然... – zmilojko 2012-01-13 17:11:55

相關問題