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陌生的人會覺得這很有用。
http://api.rubyonrails.org/classes/ActiveRecord/Base.html#method-i-to_param – glortho 2012-01-13 16:25:59
@Katen:你似乎知道你在說什麼。爲了完成你的答案:我需要做'def to_param // username //在模型中結束,然後在控制器中用'User.find_by_id(params [:id])'替換所有'User.find'' 。現在我需要遵循模型的查找方法,當然... – zmilojko 2012-01-13 17:11:55