2011-12-29 164 views
0

我想根據用戶名而不是ID獲取自定義路線。我有它的工作,以達到用戶的顯示頁面,但我也試圖嵌套資源,以便我可以看到他的帖子和評論使用相同的語法。自定義嵌套路線

例子:

作品... 「mysite.com/users/ 用戶名 /」

不工作...「mysite.com/users/ 用戶名 /職位/」

的routes.rb

... 
# Users with the Username... 
match 'users/:username' => "users#show" do 
    get :posts 
    get :comments 
end 

# Users with the ID... 
resources :users do 
    get :posts 
    get :comments 
end 
... 

回答

1

也許你可以使用to_param方法和更新嵌套的路線/資源:

的routes.rb:

resources :users do 
    resources :posts 
    resources :comments 
end 

user.rb

class User < ActiveRecord::Base 
    def to_param 
    username 
    end 
end 

在UserController中..for發現:

@user = User.find_by_username(params[:id]) 

(或任何變化o f按用戶名標準查找)

+0

我以前見過這個解決方案。它看起來像一個黑客,它覆蓋了內置的查找方法,並可能導致一堆錯誤。在rails 3.1中必須有一個更簡潔的方法。 – 2011-12-29 22:08:41

+0

這不會以任何方式影響模型的查找方法,所以我不確定可能導致哪些錯誤。是的,你必須改變你的標準控制器通過用戶名找到的發現,但我認爲你正在做的反正。這隻會覆蓋對象的to_param方法,這意味着params [:id]現在將成爲用戶名。它也會自動使用用戶名來建立你的路線。我不確定它是如何得到更清潔的。如果你仍想使用控制器參數中的數字ID,那是不同的故事。 – miked 2011-12-30 01:43:23