11

を組み込んでコントローラーを乾かそうとしていrespond_withます。私がそうするとき、Railscastのいくつかの指示に従って、私は物事がほとんど機能するようになります。問題は、リソースを削除people_urlした後のリダイレクトにあります...これはリダイレクトする必要があります...代わりに特定のリソースをロードしようとします。

私が見つけたサンプルコードは次のようになります...しかし、削除したばかりのリソースを読み込もうとして失敗します:

# 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

それで、これはこれを処理する正しい方法ですか?reply_withの背後にあるすべての「魔法」を使用すると、削除後に自分自身にリダイレクトできないことがわかりますか?また、これ(7つの基本的なRESTful CRUDメソッドの1つ)はかなり基本的で初歩的なものであるため、多くの例がたくさんあると思いました...しかし、機能しなかったコードを示唆するものを除いて、多くを見つけることができませんでした自分。

誰かがここで起こっているレールの「魔法」を理解するのを手伝ってくれることを願っています。そうすれば、これが道を進んで私に吹き飛ばされても驚かないでしょう。

4

1 に答える 1

5

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

head :ok
于 2011-02-15T06:02:08.403 に答える