2011-12-29 101 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