środa, 23 marca 2011

Rails3: respond_with i pusty json/xml/yaml przy update

W Rails3 możemy zamiast (bardzo "nie-DRY") bloku respond_to:


możemy ustawić raz w jaki sposób chcemy odpowiadać na request:

dużo ładniej prawda? :)

Jest jednak jeden problem - przy akcji update (czy każdej innej do której dostajemy się poprzez PUT) Rails zwraca status OK (200) zamiast zmienionego obiektu. Może czasem to dobrze, możliwe, że to nawet bardziej zgodne ze specyfikacją REST, tego nie wiem. Wiem tyle, że potrzebowałem aby update zwracało obiekt. Można zrobić to na 3 sposoby - dobry, okropny, jeszcze gorszy :) Zacznijmy od końca. Możemy w każdej akcji używać:


Skazujemy się jednak na jeden format zwracanych danych. Możemy wrócić znowu do bloku respond_to (to jest opcja nr.2 - okropna), lub nadpisać responder.

Tworzymy plik application_responder.rb w katalogu lib/


Następnie zmieniamy ApplicationController (app/controllers/application_controller.rb):


Dzięki temu możemy w akcji update używać respond_with:

1 komentarz:

  1. Fajne rozwiązanie. Też miałem dziś ten sam problem.

    Chętnie widziałbym ten blok "elsif put?" w ActionControllerze, albo przynajmniej wysłuchał opinii Rails core teamu dlaczego dla update jest tylko "head :ok".

    OdpowiedzUsuń