2016-06-29 30 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 
相關問題