1

多側でレコードを削除する基本的な1対多の関係を扱っています。モデルは「places」と「search_terms」で、places には search_terms がたくさんあります。新しいレコードを作成すると、ビューが更新され、新しい search_term がリストに追加されます。ただし、search_term レコードを削除すると、レコードが削除されて Place の「show」メソッドが実行されても、ビューは更新されません。

私はRails 3にかなり慣れていないので、ここで何が起こっているのか本当にわかりません...

乾杯、ギアロイド。

編集: search_terms コントローラーの destroy メソッド:

def destroy
    @search_term = SearchTerm.find(params[:id])
    @search_term.destroy

    @place = Place.find(params[:place_id])
    redirect_to place_path(@place)    
end

場所コントローラーの show メソッド:

def show
    @place = Place.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @place }
     end
end
4

1 に答える 1

0

誤解しているかもしれませんが、コントローラーのコードを投稿していただけますか?

これはajaxで起こっていますか?Showそうでない場合は、再レンダリングする代わりに にリダイレクトできますか? とにかく、それはおそらくユーザーにとって好ましいエクスペリエンスです。

アップデート

これが ajax を超えている場合、問題は単純です。あなたのdestroyアクションは、通常のブラウザー イベントを想定してredirect_to呼び出しを行っているだけです。ajax 呼び出しはそれを処理する方法を知らず、ただそこに座っています。おそらく、Firebug などでリダイレクト コードを確認できます。

私はjquery-railsにあまり精通していません(私は肛門なので、すべてのjsを自分で書くことを好みます)。destroy次のように、アクションが js 形式を返すようにすることができます。

def destroy
    @search_term = SearchTerm.find(params[:id])
    @search_term.destroy

    @place = Place.find(params[:place_id])
    respond_to do |format|
        format.html { redirect_to place_path(@place) }
        format.js { render :nothing => true }
    end
end

これにより、ajax の呼び出し元に、その処理が完了したという ok シグナルが送信されます。ただし、JavaScript は、DOM から要素を削除するなど、この応答をインテリジェントに処理する必要があります。

于 2011-06-29T21:45:52.340 に答える