方案:
我希望有一个网址路径,您可以通过:id
或:name:
查找某人。
对于user/5
或/user/tom
,所有人都指向同一个用户
routes.rb
controller 'user' do
get 'user/:id'
get 'user/:name'
end
test / routes / 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路径的正确设计决策 寻求指导
答案 0 :(得分: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参数并以相同的方式在控制器中处理它来完成此操作。
由于