2013-03-14 11 views
6

Mam klasę Photo, która ma atrybut "name" i atrybut "tags". Moim celem jest zaimplementowanie funkcji aktualizacji w Railsach, która zastępuje tagi zdjęć tym, co zostało wprowadzone. Na przykład, jeśli próbuję umieścić obiekt JSON, który ma "znaczniki" ustawione na [], chcę, aby wszystkie znaczniki zostały usunięte ze zdjęcia.Jak wysłać pustą tablicę za pośrednictwem żądania PUT przez HTTParty?

Jednakże, gdy przesyłam pustą tablicę przez HTTParty jako jeden z parametrów body, uważam, że HTTParty tłumaczy [] na zero. Dlatego punkt końcowy # photos w moim backend Railsowy nie otrzymuje nic dla parametru "tags". Szukam sposobu, aby HTTParty nie konwertował [] na zero, ponieważ utraciłem możliwość usuwania tagów ze zdjęcia.

+0

Czy ta każdy rozwiązany? Znam ten sam problem. – Nate

Odpowiedz

-1

wystarczy przypisać pustą tablicę params, na przykład:

params[:photo][:tags] ||= [] 

będzie przypisać pustą tablicę jeżeli params [: zdjęcia] [: tagi] nie jest już ustawiony. Jeśli to nie zadziała, oznacza to, że musisz dostosować klucze, na przykład może nie masz: tagów, ale: tag_ids, wtedy będziesz musiał napisać parametry [: photo] [: tags]. Po prostu sprawdź swoją strukturę HTML (zawsze możesz ją tutaj wkleić i mogę Ci pomóc). O ile mi wiadomo, to jest standardowe podejście :)

+0

Pytanie brzmi, w jaki sposób można ominąć konwersję pustych tablic na httparty do zera param. – Mohanraj

+0

@Mohanraj to sposób, w jaki sobie z tym radzisz. Jeśli nic nie jest wysyłane [tj. '' Nil'' zamiast pustej tablicy], musisz ustawić ją ręcznie. Przykro mi, że to nie spełnia twoich potrzeb, ale jestem pewien, że jest to poprawna odpowiedź (lub raczej: obejście). – mkk

+0

Nie, gdy ustawimy params [: zdjęcie] [: tagi] || = [] w żądaniu httparty, absolutnie nie otrzymuję parametrów [: fotografia] [: tagi] => zero również. – Mohanraj

1

To jest błąd/funkcja w Rails 4, możesz przeczytać więcej o dramat w: https://github.com/rails/rails/issues/13420

Twoje opcje to:

  • jednorazowa włamać podobna do użytkownika @ MKK odpowiedź
  • Uaktualnienie do Rails 5
  • Wyłącz deep_munge wszędzie, i radzić sobie z konsekwencjami, które:

>

# config/application.rb 
config.action_dispatch.perform_deep_munge = false 
+0

P.S. wyjaśnić - to nie jest problem z HTTParty, to problem z twoim backendem Railsowym konwertującym '[]' na 'nil' ze względów bezpieczeństwa. – Meekohi

Powiązane problemy