在route.rb中查询字符串

时间:2018-12-07 16:15:37

标签: ruby-on-rails ruby api routes

我想向我的路线添加另一个显式查询参数。

现在,我有这个:

Rails.application.routes.draw do
  scope :format => true, :constraints => {:format => :json} do
    get     'proxies/random(?type=:proxy_type)'   => 'proxies#random'

我想做的是再添加一个(?origin=:origin)查询参数。 我只是找不到任何文档或示例。

我相信我应该有这样的东西:

Rails.application.routes.draw do
  scope :format => true, :constraints => {:format => :json} do
    get     'proxies/random(?type=:proxy_type&origin=:origin)'   => 'proxies#random'

或者也许是这个

Rails.application.routes.draw do
  scope :format => true, :constraints => {:format => :json} do
    get     'proxies/random(?type=:proxy_type)(?origin=:origin)'   => 'proxies#random'

什么是正确的方法?

顺便说一句,这就是我在控制器中所做的事情:

  [...] 
  before_filter :find_randomly, only: :random
  [...]

  def find_randomly
    if params[:origin].nil? or params[:origin].blank?
      relation = ProxiesCatalogueProxy.where(blacklisted: false)
    else
      relation = ProxiesCatalogueProxy.where(blacklisted: false, origin: params[:origin])
    end

    @proxy = if params[:type].nil? or params[:type].blank?
              relation.order("RAND()").first
            else
              relation.where(proxy_type: params[:type]).order("RAND()").first
            end

  end

还可以有人提供有关此主题的任何好的资源/资料吗? 谢谢。

1 个答案:

答案 0 :(得分:0)

如果要将参数硬编码到路由中,可以执行以下操作:

map(parent, ~ imap(.x, ~ .x %>% mutate(identifier = .y)))

这不会影响URL匹配,并将原点添加到您的params哈希中,可以在相应的控制器中访问,并以<dependency> <groupId>org.restlet.jee</groupId> <artifactId>org.restlet</artifactId> <version>${restlet-version}</version> </dependency> <dependency> <groupId>org.restlet.jse</groupId> <artifactId>org.restlet.ext.jackson</artifactId> <version>${restlet-version}</version> </dependency> <dependency> <groupId>org.restlet.jse</groupId> <artifactId>org.restlet.ext.swagger</artifactId> <version>2.3.1</version> </dependency> <dependency> 的形式进行操作。