2016-06-29 25 views
1

我想为葡萄创建一个路由,以便路由接受一个字符串数组或一个具有特定预定义值的字符串。从文档中不清楚如何做到这一点。葡萄的路由:或者一个特定的字符串或者一串字符串

您的建议?

UPDATE:

我想status要传递一个单一的值status1或作为阵列,其中值可以是任意的和未知的。我结合这些?

params do 
    requires :status, type: Symbol, values: [:status1] 
    requires :status, type: Array[String] 
end 
+1

更具体一些。目前还不清楚你真正想做什么。你想用一种方法处理多条路线吗? – Marlon

+0

@Marlon,我不知道如何解释,更简单。 –

+0

给我们一个例子。在你的问题中加入你写的代码,但这不起作用。或者添加一个说明你想要做什么的代码。 – Marlon

回答

2

的参数必须被声明仅在PARAMS块一次。如果你声明了两次,那么Grape只会使用一个。在你的情况下,有两个选择来解决你的问题。

第一个选项:声明两个参数并将它们定义为互斥。这意味着用户将只能通知其中的一个。

params do 
    requires :status1, type: Symbol, values: [:status1] 
    requires :status2, type: Array[String] 
    mutually_exclusive :status1, :status2 
end 

第二个选项:声明只有一个参数,其类型设置为对象。在该方法的主体中,检查它是一个数组还是一个字符串。如果它是一个字符串,请验证它是否具有正确的值。

params do 
    requires :status, type: Object 
end 
get 'testing' do 
    if params[:status].class.name.eql? "Array" then 
    elsif params[:status].class.name.eql? "String" then 
    end 
end 
相关问题