ruby-on-rails - 带有查询字符串的 Rails 路由

标签 ruby-on-rails routing rest query-string

我有一个问题,我需要从 GET 请求传入的值,但我不知道如何设置路由定义。

我的 Category 对象有一个类型(字符串)、一个颜色(字符串)和许多产品。我想创建一个简单的 Web 服务,让调用者通过传入类别的类型和颜色来获取类别的所有产品:

http://www.myapp.com/getProducts?catType=toy&color=red

或者 ?
http://www.myapp.com/categories/getProducts?catType=toy&color=red

我如何为这种情况定义正确的路由?有没有更好的方法以 Restful 的方式做到这一点......因为我知道 Rails 是 Restful,所以如果有一种方法可以“正确”地做到这一点,那就更好了。

谢谢

最佳答案

你的第一个例子:

map.getproduct '/getProduct', :controller => 'your_controller', :action => 'your_action'

在 Controller 中,你将在 params 散列中有 catType 和 color:
params[:catType]
=> 'toy'
params[:color]
=> 'red'

有没有更好的办法?可能是的,但这取决于您的需求。如果你总是有 catType 和 color 参数,那么你可以像这样添加路由:
map.getproduct '/getProduct/:catType/:color', :controller => 'your_controller', :action => 'your_action'

您将可以像前面的示例一样使用 params 哈希访问这些参数。您的网址将如下所示:
www.myapp.com/getProduct/toy/red

如果您的参数可能会发生变化,您可以使用路由通配:
    map.getproduct '/getProduct/*query', :controller => 'your_controller', :action => 'your_action'

然后它将捕获所有具有 www.my.app.com/getProduct/... 的请求一开始。但是您将在 Controller 中进行更多工作。您将可以访问 query有了这个:
 params[:query]

www.myapp.com/getProduct/color/red/catType/toy它会给:
 params[:query]
 => ['color', 'red', 'catType', 'toy]

所以你必须手动解析它。

关于ruby-on-rails - 带有查询字符串的 Rails 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2257839/

相关文章:

ruby-on-rails - Rails Devise 路由错误 - "No route matches"( Controller = >"devise/sessions")

c# - 如何使用 MVC 路由多语言 URL

RESTful API 运行时可发现性/HATEOAS 客户端设计

.net - 是否有类似 .NET 开发的 Ruby on Rails 框架?

jquery - Rails,让 Bootstrap 的 typeahead 能够与 Rails 和 jquery 一起使用(正常工作)

php - 添加安全检查后 PDF 生成过程无法加载图像(cookie 未通过?)

java - Spring + Jersey + 过滤器 + @Provider

php - symfony2 Doctrine - 将 child 添加到 self 相关的实体

ruby-on-rails - 使用 Rails Composer 工具创建 rails 应用程序时显示 "/Gemfile not found"错误

ruby-on-rails - 在 Rails/Capybara/Poltergeist 规范中使用 url_for 将驱动程序发送到 example.com 而不是应用程序