2011-08-09 81 views
1

工作在一個簡單的API上,我注意到我的路由測試失敗了,因爲我的:id參數是字符串,我將它們與整數值進行比較。有沒有辦法通過routes.rb以某種方式自動投射請求參數?例如,給定下列路線(/簡檔/ 1),我想params[:id]爲整數(1)而不是字符串( 「1」):在rails中鑄造路由參數

namespace :api do 
    namespace :v1 do 
    scope '/profile' do 
     get ':id' => 'users#show', :id => /\d+/ 
    end 
    end 
end 

回答

3

一個簡單的例子from here

match '/:id' => 'posts#show', :constraints => {:id => /^\d/} 

然後,你需要做的

params[:id].to_i 

控制器行動,明確投放。我不確定是否有另一種方法可以直接在routes.rb中執行此操作,而無需使用猴子修補Rails如何收集參數。

Ruby on Rails Guides摘自:

則params的值[:IDS]現在將[ 「1」, 「2」, 「3」]。請注意,參數值始終是字符串; Rails不會嘗試猜測或投射類型。

+0

這確保值是像字符串一個整數,但我看不出實際重鑄爲整... – DGM

+1

看來是沒有辦法做,沒有猴子補丁軌。查看更新的答案。 – iwasrobbed

+1

我想我應該消毒這個輸入,並且不要假設演員即使這樣做。 – typeoneerror