2016-11-29 51 views
7

發送看起來像這樣的控制器PARAMS時碰到一個問題:導軌5 PARAMS與具有空數組作爲對象的值被丟棄

{ id: "1", stuff: {"A" => [], "B" => [], "C" => [], "D" => []} } 

的方法,只看到{ id: "1" }和整個stuff參數被丟棄。

如果數組中有任何值,則可以更改此值。但是說,有值的所有陣列除了關鍵"C",他們都將在那裏除了"C"像:

{ id: "1", stuff: {"A" => ["1"], "B" => ["2", "3"], "D" => ["4"]} } 

我愛上了這個問題升級從Rails的4.2.x版 - > 5.0.0 有關這裏發生的事情的任何建議?我在munging parameters附近看到了一些文章/問題,但我不確定這是否是問題,因爲在他們的示例表中,作業工作是{person: []}變爲{person: nil},其中參數沒有被完全丟棄。

回答

6

從GH社區@sgrif:

這是預期的行爲。沒有辦法使用HTML表單(例如Content-Type:url-form-encoded)對空的 數組進行編碼。 原因你在Rails 4.2中傳遞的測試是因爲控制器測試確實沒有編碼它們的參數 ,他們只是直接通過 傳遞散列。在Rails 5中,它對它們進行編碼。如果您的控制器關心空數組,則可能是您正在處理JSON請求。你可以在你的測試中使用as::json來做到這一點。如果你只是處理 表單輸入,你永遠不會收到一個空數組。

添加as: :json沒有最終爲我工作,但在測試開始時加入@request.headers["Content-Type"] = 'application/json'

+0

謝謝,那標題調整也爲我做了詭計。我們有任何線索爲什麼作爲:: json解決方案不工作? – Andrew

+0

我沒有進一步撬動,抱歉。 – Luke

+0

感謝分享! –