为什么我的依赖破坏不在Rails中工作?

时间:2013-08-18 14:39:42

标签: ruby-on-rails rails-activerecord

感谢您对此的帮助!我有很多newsavedmaps,每个都可以有多个航点。航点表使用字段“newsavedmap_id”连接到newsavedmaps id。我是Rails的新手(使用Rails 2),我遇到了破坏功能的问题。基本上,如果用户摆脱了newsavedmap,我也想要消除航路点。

newsavedmap.rb

    has_many :waypoints, :dependent => :destroy

waypoint.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 dependent destroy error),但我似乎无法找到解决方案。

2 个答案:

答案 0 :(得分: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

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

还有一件事,重要的是你试图在该点击上调用javascript函数,该函数将重定向到newsavedmap show page。尝试更改该链接:

<%= link_to 'Destroy', newsavedmap_path(@newsavedmap),
        :confirm => 'Are you sure?', :method => :delete %>

答案 1 :(得分:1)

如果您在 newsavedmap 中添加了依赖性破坏,则无需调用

  

@ waypoint.destroy //不需要