【问题标题】:Rails remote delete and update view through AjaxRails 通过 Ajax 远程删除和更新视图
【发布时间】:2013-07-18 14:57:39
【问题描述】:

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

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

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

我可以通过简单地将其放入控制器中来调用我的 destroy.js.erb 文件的 destroy 方法:

  format.js { layout: false }

当然还要在链接上设置remote: true

我不能做的是让视图刷新。我要刷新的表包含在具有唯一 ID 的 div 中,但由于它不是部分的,因此它拒绝刷新内容。也许我错过了一些东西。

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

谢谢。

附言 此外,我刚刚注意到这有一个额外的缺点,即我无法将其余参数传递给 destroy 方法,因为它只传递对象 ID 以使用常规 CRUD 路由进行销毁。如果我尝试使用 platform(action: destroy)platform(method: delete) 会出现错误:

No route matches {:action=>"destroy", :controller=>"platforms"}

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

所有这一切的另一个缺点是我在destroy方法中再次重复了我在index方法中的所有搜索和排序逻辑。我确信这绝对不是这样做的方式。

【问题讨论】:

    标签: ajax ruby-on-rails-3.2 partial-views


    【解决方案1】:

    感谢这个页面,我找到了正确的方法。如此简单有效。

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

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

    <%= link_to 'Destroy', pony, method: :delete, data: { confirm:
    'Are you sure?' }, :remote => true, :class => 'delete_pony' %>
    

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

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

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

    respond_to do |format|
     format.html { redirect_to ponies_url }
     format.json { head :no_content }
     format.js   { render :layout => false }
    end
    

    希望这对其他人有所帮助。

    【讨论】:

    • 非常感谢。这对我来说非常有效。您可能应该将其标记为已接受的答案或在此处的答案中编写代码。
    • 感谢分享,这对我很有帮助。外部博客帖子有消失的讨厌习惯,因此我编辑了您的答案以包含相关代码以防万一。
    猜你喜欢
    • 2015-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-23
    • 2014-11-29
    • 1970-01-01
    相关资源
    最近更新 更多