在Rails5 API中,我能够向路线添加Contraints。例如;
GET /hello => hello#index
GET /hello?download => hello#download
正如您所看到的,两个网址都相同。唯一不同的是第二个包含约束,如果下载参数在URL中,则重定向到另一个操作。
我怎样才能在Grape上做同样的事情?我无法在他们的文档和问题列表中找到任何资源。
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
答案 0 :(得分:0)
添加可选参数并重定向(如果已收到):
params do
optional :download
end
get :hello do
redirect '/' if params[:download]
end