过去,每当我想通过Ajax更新 View 的一部分时,我都会做以下事情:

  • 从我要更新的部分中创建一部分,并为其赋予唯一的ID,例如#tracks
  • 在 Controller 中为该Ajax调用创建一个特殊操作,说出remove_track以更新所有值,等等,并添加format.js
  • 创建一个与 Action 名称相同的新JS文件,因此Rails会自动将其称为remove_track.js.erb,其中包含以下内容:$('#tracks').html("<%=j render 'cds/show_tracks' %>");
  • 在调用此操作的链接中设置remote: true

  • 所有这些都很好,但是现在我正尝试使用常规index方法删除和更新常见的destroy View ,以实现灵活性,这意味着我可以通过Ajax或正常情况下调用此方法。我认为这是一件很平常的事情,必须有比上述所有方法更好的方法。

    只需将其放入 Controller 中,就可以得到destroy方法来调用destroy.js.erb文件:
      format.js { layout: false }
    

    当然在链接上设置remote: true

    我不能做的是刷新 View 。我要刷新的表包含在具有唯一ID的div中,但是由于它不是局部表,因此它拒绝刷新内容。也许我想念一些东西。

    我是否注定要使用上述方法创建部分内容并刷新它,还是有一种更神奇的方法(除了使用Turbolinks之外)?

    谢谢。

    PS
    此外,我刚刚注意到这还有一个缺点,即我无法将其余参数传递给destroy方法,因为它仅传递对象ID来使用常规CRUD路由销毁。如果我尝试使用platform(action: destroy)platform(method: delete),则会收到错误消息:
    No route matches {:action=>"destroy", :controller=>"platforms"}
    

    这意味着如果我想传递这些参数,则必须创建一条新路线...

    所有这一切的另一个缺点是,我将销毁方法中的索引方法中的搜索和排序逻辑全部废除了。我敢肯定这是绝对不是的实现方式。

    最佳答案

    多亏了此页面,我找到了正确的方法。如此简单有效。

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



    希望这对其他人有帮助。

    10-06 04:36
    查看更多