【发布时间】:2013-07-18 14:57:39
【问题描述】:
过去,每当我想通过 Ajax 更新部分视图时,我都会执行以下操作:
- 从我要更新的部分中创建一个部分,并给它一个唯一的 ID,比如
#tracks - 在控制器中为该 Ajax 调用创建一个特殊操作,例如更新所有值的
remove_track等,然后添加format.js - 创建一个与动作同名的新 JS 文件,以便 Rails 自动调用它
remove_track.js.erb,其中包含类似:$('#tracks').html("<%=j render 'cds/show_tracks' %>"); - 在调用此操作的链接中设置
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