ruby-on-rails-3 - rails 通过 :id or :name 路由可选参数类型

标签 ruby-on-rails-3 url testing routes custom-routes

场景: 我想要一个 url 路径,您可以在其中通过 :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 路径设计决定。
寻求指导

最佳答案

我认为您正在做的事情不会奏效,因为您提供的路线不明确,因为 rails 路线不能说像 user/15 这样的 url 有名称或 ID。

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

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

以上语句对正则表达式进行了约束。在您的 Controller 中,您可以检查一下

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

您也可以通过传递 get 参数并以相同的方式在 Controller 中处理它来完成此操作。

谢谢

关于ruby-on-rails-3 - rails 通过 :id or :name 路由可选参数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12518862/

相关文章:

url - StackOverflow 如何避免其 URL 中的文件扩展名和 GET 参数?

url - 我可以在 URL 中使用 '|' 吗?

java - JUnit 测试创建相同的数组而不是随机数组

jQuery:带有 html 实体的 ajax POST

ruby-on-rails - 禁用设计可确认邮件

ruby-on-rails - 如何修改 Rails 3 表单生成器

javascript - "respond_with_navigational"是如何工作的?

android - 如何使用 Gradle Android 运行单个仪器测试

testing - Jmeter:如何使用 JMeter 使 1000 或 “X” 用户登录请求 session 保持事件状态?

css - Bootstrap Rails - 更改背景颜色,不起作用?