ruby-on-rails - 仅具有查询字符串或数字的 Rails 4 路由约束

标签 ruby-on-rails ruby rest ruby-on-rails-4 routes

我正在尝试使用约束来实现这两条路线:

get "products/:id", to: "products#show", constraints: { id: /\d/ }
get "products/:name", to: "products#search", constraints: { name: /[a-zA-Z]/ }

第一个路由应该使用类似 localhost:3000/products/3 的 URL 触发,最后一个应该使用 localhost:3000/products/?name=juice 触发.

不起作用,我在谷歌上搜索了很多关于这个问题的信息,但我似乎找到了适用于第二版或第三版 Ruby on Rails 的解决方案,其中大部分现在已被弃用。

有什么想法吗?谢谢。

最佳答案

如果您喜欢生成的 URL 的外观,您可以按原样使用路由。无需查询字符串。

在你的 Controller 中,你会有类似这样的东西:

def show
  @product = Product.find(params[:id])
  # do stuff
end

def search
  # I'm assuming your Product model has a `name` attribute
  @product = Product.find_by(name: params[:name])
  # do stuff
end

您可能需要对返回 nil 的 find_by 进行一些错误检查,因为 :name 没有匹配任何内容,但基本上就是这样。

您的 routes.rb 将具有您的原始路线定义:

get "products/:id", to: "products#show", constraints: { id: /[[:digit]]/ }
get "products/:name", to: "products#search", constraints: { name: /[[:alpha:]]/ }

您的应用程序应响应以下两种情况:

  • 本地主机:3000/products/3
  • 本地主机:3000/产品/果汁

关于ruby-on-rails - 仅具有查询字符串或数字的 Rails 4 路由约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35979076/

相关文章:

ruby - 如何中断命令行脚本中的循环,但仅在方法完成后才中断?

ruby - 为 REST CRUD 设置 rom-http 关系

java - 模拟请求实体调用以进行单元测试

php - 在 Slim 框架中创建基本身份验证

ruby-on-rails - Solidus (Ruby on Rails) - 如何更改标志?

css - Chrome 中的 Rails 布局错误,但 Firefox 显示正常

ruby-on-rails - 有没有办法让:reserved_words option for models in FriendlyId gem does not overwrite the Rails defaults?

ruby-on-rails - 修改 Rails 助手以添加 HTML 类

javascript - 在 fb 共享时,在 fb_close 之后从 Rails 中的 Controller 调用 js 函数

rest - 二郎 YAWS : How to test a simple REST web service?