1

场景:我想要一个 url 路径,您可以在其中通过:idor查找某人:name:
For user/5or /user/tomwill all 指向同一个用户

路线.rb

controller 'user' do  
    get 'user/:id'  
    get 'user/:name'  
end 

测试/路由/user_routes.rb

test "/user/:id" do  
  assert_routing "/user/5", :controller => "user", :action => "find_by_id", :id=>"5"  
end  

test "/user/:name" do  
  assert_routing "/user/tom", :controller => "user", :action => "find_by_name", :name=>"tom"  
end 

我不确定这是否是使用 URL 路径的正确设计决策。
寻求指导

4

1 回答 1

2

我不认为你正在做的事情会奏效,因为你给出的路线是模棱两可的,因为 rails 路线不能说像 user/15 这样的 url 有名称或 id。

当然有一种方法可以做到这一点,通过指定正则表达式。由于 id 总是一个数字,我们可以对其进行正则表达式检查

controller 'user' do  
    get 'user/:id', :id => /\d+/
    get 'user/:name', :name => /[A-Za-z][\w\s]+/
end 

上述语句对正则表达式进行了约束。在您的控制器中,您可以检查

if params[:id]
# Get by id
else
# Get by name

您也可以通过传递 get 参数并以相同的方式在控制器中处理它来做到这一点。

谢谢

于 2012-09-20T19:19:03.887 回答