如何将查询参数约束应用于葡萄?

时间:2017-12-11 18:05:48

标签: ruby-on-rails ruby rack grape

在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

1 个答案:

答案 0 :(得分:0)

添加可选参数并重定向(如果已收到):

params do
  optional :download
end

get :hello do
  redirect '/' if params[:download]
end