11

respond_withを組み込んでコントローラをDRYしようとしています。レールケストの指示に従うと、のほとんどがになります。問題はリソースを削除した後のリダイレクトにあります... people_url ...にリダイレクトする必要がありますが、特定のリソースを読み込もうとします。Rails 3:respond_withを使用してリソースを削除する適切な方法

私はこのようなルックスを見つけた...しかし、それはそれだけで削除されたリソースをロードしようと失敗したサンプルコード:

# app/controllers/people_controller.rb 
class PeopleController < ApplicationController 
    respond_to :html, :xml 

    def destroy 
    @person = Person.find(params[:id]) 
    flash[:notice] = 'Successfully deleted person.' if @person.destroy 
    respond_with(@person) # <== spec fails here 
    end 
end 

私が期待したのに(どちらかrespond_with(@people)への最後の行が動作しないことを変えますそれだろう...)ずっと周り掘り、私は物事が仕事になりました事を理解するために全力をしようとした後

(少なくともそう見えるスペックパッシングアプリの機能を)これで:。。

respond_with(@person, :location => people_url) # <== now it works 

これを処理する正しい方法ですか? respond_withの背後にあるすべての '魔法'で、削除後に自分自身にリダイレクトできないことがわかるでしょうか?私はまた、これ(7つの基本的なRESTful CRUDメソッドのうちの1つ)がかなり基本的で初歩的なので、多くの例がたくさんあると考えました...しかし、私は多くのものを見つけることができませんでした私。

誰かを願って、ここで発生しているレールの魔法を理解するのを助けることができるので、これが私に爆発して驚くことはありません。

答えて

5

あなたは削除されたリソースで応答しようとしています。それが問題です。削除などの場合、ヘッダーのみの応答が機能します。要求ヘッダーのステータスを:okに設定するだけで十分です。

head :ok 
+2

ありがとう、悲しいことに、私はまだ混乱しています。あなたは 'respond_with(head:ok)'を提案していますか?それはうまくいかないからです。私は 'respond_to'ブロックの中で' format.xml {head:ok} 'に慣れています。この場合、 'respond_with'を使用してどのように動作させるのかは分かりません。 – Meltemi

+0

@Meltemi - Ryan BatesのASCIICastをチェックしてください:http://asciicasts.com/episodes/224-controllers-in-rails-3 – dennismonsewicz

関連する問題