2013-10-25 30 views
1

西納特拉接受鑑於這種接受頭球衝頂期權價值

application/vnd.example.api.json; version=42 

有沒有一種簡單的方法來獲取的version值不用解析env['HTTP_ACCEPT']

BTW:

檢查request.accept,我們可以發現一個@params實例方法:

[#<Sinatra::Request::AcceptEntry:0x007fd214b3e500 @entry="application/vnd.example.api.json; version=42", @type="application/vnd.example.api.json", @params={"version"=>"42"}, @q=1.0>] 

它們可用於訪問它的方式...

回答

0

簡短的回答應該是:是

長答案:去這裏:https://github.com/sinatra/sinatra/blob/master/lib/sinatra/base.rb#L74 看代碼:

class AcceptEntry 
    attr_accessor :params 
    [...] 
end 

因此,這應該歸結爲:

request.accept[0].params['version'] #=> 42 
+0

奇怪,我有:'NoMethodError - 未定義的方法 'PARAMS' 爲#<陣列:0x007fcc12319bc0>'。 .. – Doug

+1

@Doug'request.accept'返回一個'AcceptEntry'數組。你需要像request.accept.find {| entry | entry.to_s =='application/vnd.example.api.json'}。params ['version']'。 (你也應該檢查'find'的結果是否爲'nil'。) – matt

+0

只需修復答案,女巫似乎是最簡單的解決方案。 – Doug