Rails通过Ajax远程删除和更新视图

过去,每当我想通过Ajax更新视图的一部分时,我都会执行以下操作:

  1. 用我想要更新的零件创建一个零件,并给它一个唯一的ID,比如说#tracks
  2. 在控制器中为该Ajax调用创建一个特殊操作,比如说remove\u track更新所有值,等等,然后添加format.js
  3. 创建一个与该操作同名的新JS文件,以便Rails自动调用它remove_track.JS.erb,该文件包含以下内容:$(“#tracks”).html(“<%=j render'cds/show_tracks”%>”
  4. 在调用此操作的链接中设置remote:true

所有这些都很好,但是现在我尝试使用常规的destroy方法来删除和更新一个常见的索引视图,以提高灵活性,这意味着我可以通过Ajax或正常调用此方法。我觉得这是一件很平常的事情,必须有一个比以上所有的更好的方法

我可以让destroy方法调用我的destroy.js.erb文件,只需将其放入控制器:

format.js{layout:false}

当然,在链接上设置remote:true

我不能做的是刷新视图。我要刷新的表被封装在一个具有唯一ID的div中,但由于它不是部分,所以拒绝刷新内容。也许我错过了什么

我是注定要创建一个部分并用上面的方法刷新它,还是有一种更神奇的方法来实现它(除了使用TurboLink)

谢谢

PS
此外,我刚刚注意到这还有一个额外的缺点,即我无法将其余的参数传递给destroy方法,因为它只使用常规CRUD路由传递要销毁的对象ID。如果我尝试使用平台(操作:销毁)平台(方法:删除)我会得到一个错误:

没有路由匹配{:action=>“destroy”,:controller=>“platforms”}

这意味着如果我想传递这些参数,我必须创建一个新的路由

所有这一切的另一个缺点是,我将索引方法中的所有搜索和排序逻辑重新加载到destroy方法中。我确信这绝对不是这样做的

多亏了这一页,我找到了正确的方法。简单有效

http://carmennorahgraydean.blogspot.com.es/2012/10/rails-328-ajax-super-basic-example.html

更新index.html.erb中的销毁行:

<%=链接到“销毁”,小马,方法::删除,数据:{确认:
“你确定吗?”},:remote=>true,:class=>'删除第“%”项;

创建一个文件destroy.js.erb,将其放在其他.erb文件旁边
(在应用程序/视图/小马下)。应该是这样的:

$('.delete_-pony').bind('ajax:success',function(){
$(this).closest('tr').fadeOut();
});

将format.js{render:layout=>false}添加到控制器:

响应待办事项|格式|
format.html{redirect_to ponies_url}
format.json{head:no_content}
format.js{render:layout=>false}
终止

希望这对其他人有帮助

发表评论