2010-09-08 8 views
24

kodW Railsach 3, respond_to i format.all działa inaczej niż Rails 2?

respond_to do |format| 
    format.html 
    format.json { render :json => @switches } 
    format.xml { render :xml => @switches.to_xml } 
    format.all { render :text => "only HTML, XML, and JSON format are supported at the moment." } 
end 

powyżej działa w szynach 2.2.2. Ale w Railsach 3, pobieranie kontrolera/index.html lub indeksu w przeglądarce będzie pasować do ostatniej linii: "tylko format HTML i JSON są w tym momencie obsługiwane."

Jedynym doc Szyny mogę znaleźć na to

http://api.rubyonrails.org/classes/ActionController/MimeResponds/ClassMethods.html#method-i-respond_to

których prąd tylko stwierdza:

respond_to :html, :xml, :json 

ale muszą osobne szablony dla JSON i XML i nie może obsłużyć "tylko format HTML i JSON są obsługiwane w tej chwili".

Odpowiedz

3

Może okazać się użyteczne obejrzenie tego odcinka railscastów, który ilustruje zmiany kontrolerów w Rails 3, a w szczególności zmiany w klasie respondera (umieszczenie respond_to w samej klasie kontrolera i użycie parametru respond_with @ object w polu akcja):

http://railscasts.com/episodes/224-controllers-in-rails-3

43

W rails3 byłoby napisać:

respond_with(@switches) do |format| 
    format.html 
    format.json { render :json => @switches } 
    format.xml { render :xml => @switches } 
    format.all { render :text => "only HTML, XML, and JSON format are supported at the moment." } 
end 

ale to tylko prace w korespondencji z respond_to bloku na górze fil e, wyszczególniając spodziewane formaty. Na przykład.

respond_to :xml, :json, :html 

Nawet w takim przypadku, jeśli ktoś na przykład pyta formatu na js, blok any jest wyzwalany.

Można też nadal korzystać z respond_to sam, jak następuje:

@switches = ... 
respond_to do |format| 
    format.html {render :text => 'This is html'} 
    format.xml {render :xml => @switches} 
    format.json {render :json => @switches} 
    format.all {render :text => "Only HTML, JSON and XML are currently supported"} 
end 

nadzieję, że to pomaga.

+0

Myślę, że wywołanie to_xml jest zbędne. Domyślny Rails 3 responder powinien wywołać go automatycznie. – dogenpunk

+1

format.any ma ten sam problem co format.all dla mnie. czy to może mieć znaczenie: http://blogs.thewehners.net/josh/posts/354-obscure-rails-bug-respond_to-formatany – dreeves

+0

@dogenpunk: to oczywiście prawda. Poprawiłem moją odpowiedź, aby to pokazać. Dodałem również czysty przykład "reply_to" (i dodano wyjaśnienie). @dreeves: dla mnie to po prostu działa, wymieniony wpis na blogu jest pradawny w kategoriach Railsowych :) – nathanvda

0

Następujące prace dla mnie. Uważam, że musisz wyraźnie określić część "render" dla html lub użyje ona formatu.

respond_to do |format| 
    format.html { render :html => @switches } 
    format.json { render :json => @switches } 
    format.xml { render :xml => @switches } 
    format.all { render :text => "we only have html, json, and xml" } 
end 
Powiązane problemy