默认情况下,Rails提供了两种设置RESTful路由的方法(让:id
段是一个整数约束/[0-9]/+
):
1. site.com/users/10/homes/15
2. site.com/user/homes/15
第一个变体:
您的控制人员:UsersController
和HomesController
您的路线:
resources(:users) do #=> plural, so the url path is /users/10, :id segment possible
resources(:homes) #=> plural, so the url path is /homes/10, :id segment possible
end
第二个变体:
您的控制人员:UsersController
和HomesController
您的路线:
resource(:user) do #=> singular, so the url path is /user, no :id segment
resources(:homes) #=> plural, so the url path is /homes/10, :id segment possible
end
但这些网址看起来并不好看。我希望他们像这样:
site.com/bugsbunny123/homeinny
第一段和第二段是正则表达式,但仍然连接到Users
和Homes
控制器,并且是RESTful。我知道如何使用非资源路由来实现它。但是,使用:via => POST
,:via => PUT
,:except
等将每个方法映射到控制器的RESTful方法是相当繁琐的。
我想要这样的事情:
:users => /[A-Za-z0-9]+/
resource(:users) do ...
或者像这样:
resource(/[A-Za-z0-9]+/ => :users) do ...
我们的想法是使用regexp用户名而不是默认RESTful路由器现在提供的硬编码/users/10
。
是否可以使用resource(:controller)
实现它?或者我必须使用非资源路由?