提交表单/操作后的Rails 5停留在页面上的完全相同的位置

时间:2016-10-06 11:10:29

标签: ruby-on-rails ruby-on-rails-5

我有这个网上商店,你在一个页面上看到

  1. products;
  2. 提交booking;
  3. 的提交表单
  4. 您的order及其bookings;
  5. ,其中包含booking;
  6. 的删除链接
  7. 以及booking
  8. 的更新表单

    order.bookingsproducts都会在html页面上制作可能很长的列表。

    整个预订仅由booking_controller工作。

    booking_controller的作用:

    • 在单一预订(或新的)参数中进行单次预订或销毁行动。
    • 保存新订单。
    • 重定向到商店。

    工作正常,只需使用 ruby​​ html.erb

    只有问题,这真的需要改变,显然是在每次重定向后,浏览器都会转到页面顶部。浏览器没有集中注意力。或者更好的说,浏览器应该保留,但不会。

    我知道你在服务器端做所有这些事情,所以需要重新加载页面,或者说更好的数据刷新。我不想要的是在客户端(JS)再次构建这一整体。

    在数据刷新重定向到页面上的完全相同位置后,我不能简单地说:。忽略异步请求会给出的所有困难,或者我是否夸大并且轻松一点JS?

1 个答案:

答案 0 :(得分:2)

使用Rails,使用ajax非常容易,但是如果你根本不熟悉ajax,那么起初可能有点令人生畏。幸运的是,有很多关于这个主题的教程。基本上,将remote: true选项添加到您的form_for语句中,rails会自动了解您是否希望它能够发布' POST'以JS格式请求。认识到传入的HTTP请求是JS格式是很重要的,因为您需要指定在控制器中处理该事件。如:

   def create
     #Do whatever saving and processing you need here
     respond_to do |format|
        format.html { redirect_to some_path_here }
        format.js { } #By not adding anything in the brackets here, you're telling rails to fetch a js view file that follows standard rails convention and so it should be named 'create.js.erb'
   end

然后在您的控制器的视图文件夹中创建视图文件create.js.erb。在该文件中,您将要刷新页面中需要更新的任何部分,这通常涉及隐藏那里的旧div并在其位置附加部分。我通常在页面上留下一个带有ID的空div(在这种情况下是new_whatever_page.html.erb,然后我在js.erb文件中调用它来附加部分:

在你的create.js.erb中添加:

$("#the-id-of-the-div-in-your-new-view-page").html("<%= escape_javascript(render 'order_table') %> #This basically says, find the div on the current page with a matching id and then append the partial named _order_table.html.erb to it.

现在只做一个名为

的部分
  

_order_table.html.erb

在相同的视图文件夹中,放置要插入或更新的内容。