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

时间:2013-07-18 14:57:40

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

过去,每当我想通过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
  5. 所有这一切都很好,但现在我尝试使用常规index方法删除和更新常见destroy视图以获得灵活性,这意味着我可以通过Ajax或正常方式调用此方法。我认为这样做很常见,必须有比上述所有方法更好的方法。

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

      format.js { layout: false }
    

    当然在链接上设置remote: true

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

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

    感谢。

    PS 此外,我只是注意到这有一个额外的缺点,我不能将其余的参数传递给destroy方法,因为它只使用常规CRUD路由传递对象ID来销毁。如果我尝试使用platform(action: destroy)platform(method: delete),我会收到错误消息:

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

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

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

1 个答案:

答案 0 :(得分:22)

感谢此页:

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

我找到了正确的方法。如此简单有效。

希望这有助于其他人。