【发布时间】:2018-05-25 07:42:40
【问题描述】:
在 Rails5 API 中,我能够将 Contraints 添加到路由中。例如;
GET /hello => hello#index
GET /hello?download => hello#download
如您所见,两个 URL 相同。唯一的区别是第二个有约束,如果下载参数在 URL 中,那么它会重定向到另一个动作。
我怎样才能在葡萄上做同样的事情?我在他们的文档和问题列表中找不到任何资源。
get :hello do
'I am a hello world page'
end
但是如果 URL 有一些我预定义的查询参数,那么我想执行这个:
get :hello do { ?download }
'download a file (for example)'
end
我使用params 并创建了一个requires 参数。 仍然是第一个捕获请求。
这是我在 Rails API 上使用的路由:
class DownloadConstraint
def matches?(request)
request.query_parameters.key?('download')
end
end
更新:我想更清楚地说明这一点。我想同时使用这两条路线。我知道 params 包可用于在执行前要求参数。我想要实现的是我想根据 GET 参数设置路由。查看 Rails 的高级约束:http://guides.rubyonrails.org/routing.html#advanced-constraints
【问题讨论】:
标签: ruby-on-rails ruby rack grape