2016-11-29 13 views
7

Tôi đang gặp một vấn đề khi gửi một params điều khiển mà trông như thế này:Rails 5 params với đối tượng có mảng rỗng như các giá trị được giảm

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

Phương pháp này chỉ nhìn thấy { id: "1" } và toàn bộ tham số stuff được giảm .

Điều này có thể thay đổi nếu có bất kỳ giá trị nào trong các mảng. Nhưng nói có giá trị trong tất cả các mảng trừ phím "C", tất cả họ sẽ có mặt ở đó bên cạnh "C" như:

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

Tôi đang rơi vào nâng cấp vấn đề này từ Rails 4.2.x -> 5.0.0 Bất kỳ đề xuất về những gì đang xảy ra ở đây? Tôi đã thấy một vài bài viết/vấn đề xung quanh munging parameters, nhưng tôi không chắc đó có phải là vấn đề hay không bởi vì trong bảng ví dụ về cách thức hoạt động của munging là {person: []} trở thành {person: nil}, trong đó thông số người không bị xóa hoàn toàn.

Trả lời

6

Từ @sgrif trong cộng đồng GH:

Đây là hành vi dự kiến. Không có cách nào để mã hóa mảng trống rỗng bằng cách sử dụng biểu mẫu HTML (ví dụ: Loại nội dung: mã hóa dạng url). lý do các thử nghiệm của bạn được chuyển trong Rails 4.2 là do kiểm tra bộ điều khiển đã làm không mã hóa các tham số của chúng, chúng chỉ cần chuyển trực tiếp mã băm thông qua số . Trong Rails 5 nó mã hóa chúng. Nếu trình điều khiển của bạn quan tâm đến khoảng các mảng trống, có khả năng bạn đang xử lý các yêu cầu JSON. Bạn có thể làm điều đó trong thử nghiệm của bạn với: json. Nếu bạn chỉ đang xử lý một đầu vào biểu mẫu , bạn sẽ không bao giờ nhận được một mảng trống.

Thêm as: :json không kết thúc với tôi, nhưng thêm @request.headers["Content-Type"] = 'application/json' vào đầu thử nghiệm.

+0

Cảm ơn, tinh chỉnh tiêu đề đó cũng thực hiện thủ thuật cho tôi. Chúng ta có bất kỳ đầu mối nào không vì sao:: giải pháp json không hoạt động? – Andrew

+0

Tôi không nói thêm nữa, xin lỗi. – Luke

+0

Cảm ơn bạn đã chia sẻ điều này! –

Các vấn đề liên quan