感谢您对此的帮助!我有很多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),但我似乎无法找到解决方案。
答案 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 //不需要