TL;DR
Edgerails
最近想在 GET request 裡面塞個 array 當作參數
可是在 rails 後端接到的 params 裡面只出現了最後一個值
於是就來研究為啥會這樣子拉
…
…
前端檢查了一遍發現沒有問題,date_range
都是以Array
的方式活著直到…
它被傳給了 rails
這個前端的專案架構每個 request 都會先經過一層 rails 後端做包裝之後,才打去真正的 rails 後端。
於是跑來檢查第一層是不是做了什麼事情
…堪稱完美
只好來看看是怎麼打到真正的後端的
看起來是用了 http
這個 Gem 來做 API 的處理
那是不是http
對params
做了什麼事情讓他壞掉的呢?
於是找到了http
的 source code…
看起來這邊是用了HTTP::Uri
的query_values
方法,這個方法是從addressable
偷過來的
會被正確的轉成Array
格式的query string
,詳情見連結原始碼
那為什麼本機這邊運行的會有問題呢?有可能是 Gem 的版本過舊導致的問題,所以就跑去找了http
的檔案,在client.rb
裡面發現這邊處理的方式不太一樣
這邊使用的是HTTP::Uri
的form_encode
方法,看起來也挺好的,實測發現在這邊也有正確的被轉成Array
最後就只能懷疑是Rails
搞的鬼拉,於是在官方文件發現了以下這段
使用Postman實測:
[]
之後就成功地在 Rails GET request 的 query string 裡塞進Array
了其他框架也有類似問題:
PHP