1

ご協力いただきありがとうございます。多くのニュース保存済みマップがあり、それぞれに複数のウェイポイントを設定できます。ウェイポイント テーブルは、フィールド「newsavedmap_id」を使用して、newsavedmaps ID に接続します。Rails (Rails 2 を使用) は初めてで、破棄機能に問題があります。基本的に、ユーザーがニュース保存済みマップを削除した場合、ウェイポイントも削除したいと考えています。

newsavedmap.rb

    has_many :waypoints, :dependent => :destroy

ウェイポイント.rb

    belongs_to :newsavedmap

newsavedmap コントローラー (これが問題だと思います)

    def destroy
    @newsavedmap = Newsavedmap.find(params[:id])
    @waypoint = Waypoint.find(params[:id])
    @newsavedmap.destroy
    @waypoint.destroy

    respond_to do |format|
    format.html { redirect_to "/CODE" }
    format.xml  { head :ok }
    end
    end

ビュー newmaps.html.erb もあります。ユーザーはページに自分のニュース保存済みマップが表示され、リンクをクリックできます。

    <a href="/newsavedmaps/<%= newsavedmap.id %>" class="newremovemap"></a>

彼がそうするとき、これはキックインするJavaScriptです:

    $('.newremovemap').click(function(){
        if (confirm('Are you sure you want to remove this map?')) {
            var mappage = $(this).closest('.wholemap'); 
            var map = $(this).parent();
            $.post(this.href, { _method: "delete", authenticity_token: $('#auth_token').val() }, function(){
                mappage.fadeOut();

            });
        };
        return false;
    })

リンクをクリックすると、警告メッセージが何度も繰り返されますが、レコードは削除されません。エラー コードは ActiveRecord::RecordNotFound (ID なしで Waypoint を見つけることができませんでした) です。このようなリンクを問題 ( Rails 依存の destroy エラー) に適用しようとしました が、解決策が見つからないようです。

4

2 に答える 2

2

newsavedmap を破棄するだけで、関連するウェイポイントが自動的に削除されます。

  def destroy
    @newsavedmap = Newsavedmap.find(params[:id])
    @newsavedmap.destroy

    respond_to do |format|
      format.html { redirect_to "/CODE" }
      format.xml  { head :ok }
    end
  end

もう 1 つの最も重要なことは、単一の params[:id] を使用して、2 つのクラス (Newsavedmap、Waypoint) のオブジェクトを見つけようとしているということです。これは間違っています。コード リンクは Newsavedmap 用であるため、Waypoint ではなく、params[:id] でそのオブジェクトを見つけることができます。

もう1つ重要なことは、そのクリックでjavascript関数を呼び出そうとしていることです.newsavedmapショーページにリダイレクトしています.そのリンクも変更してみてください:

<%= link_to 'Destroy', newsavedmap_path(@newsavedmap),
        :confirm => 'Are you sure?', :method => :delete %>
于 2013-08-18T14:47:20.313 に答える
1

newsavedmapに依存する destroy を追加した場合は、呼び出す必要はありません

@waypoint.destroy // 不要

于 2013-08-18T15:02:44.537 に答える