1

感谢您对此的帮助!我有很多新闻保存的地图,每个地图都可以有多个航点。航点表通过字段“newsavedmap_id”连接到 newsavedmaps id。我是 Rails 新手(使用 Rails 2),我在销毁功能方面遇到了麻烦。本质上,如果用户摆脱了新闻保存的地图,我也想消除航点。

新闻保存地图.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。用户在页面上看到他的newsavedmap,他可以点击一个链接:

    <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 的破坏错误),但我似乎找不到解决方案。

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

另一个最重要的事情是,使用单个参数 [:id],您试图找到两个类的对象(Newsavedmap,Waypoint),这是错误的。根据代码链接是针对 Newsavedmap 的,因此您可以通过 params[:id] 找到它的对象,而不是 Waypoint。

还有一件事,重要的是您尝试在该点击上调用 javascript 函数,该函数将重定向到 newsavedmap 显示页面。尝试更改该链接:

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

如果您在newsavedmap中添加了依赖销毁,则无需调用

@waypoint.destroy // 不需要

于 2013-08-18T15:02:44.537 回答