Rails - 当用户单击提交按钮时如何更新表中的数据

Posted

技术标签:

【中文标题】Rails - 当用户单击提交按钮时如何更新表中的数据【英文标题】:Rails - How update data in table when user clicks on submit button 【发布时间】:2017-04-16 12:24:44 【问题描述】:

我正在使用 Rails 3.2 并在此页面中显示包含结果列表的表格,通过 @jobs 变量传递给视图,该变量是 SQL 查询的结果,并且我想为此添加一个按钮页面,以便当用户单击它时,会调用一个控制器操作,该操作会执行一些数据库工作,然后使用最新结果刷新表格。

我对 JS 和 AJAX 完全陌生,并且对 Rails 非常熟悉,所以我不知道如何做到这一点。

我创建了一个这样的按钮:

<%= form_tag( "controller/get_job", class: "text-center", id: "get-job-form" ) do %>
<%= submit_tag "Get Job", id:"get-job-submit", class: "button" %>
<% end %>

认为它会调用我的控制器的 get_job 操作。但我不希望此操作导致新页面,我只想“刷新”用户所在页面内的该表。

我的控制器操作类似于:

def get_job
  job = find_job
  job.employee = me
  job.save
  # Here I want to refresh the table so that this new job shows up in   the table
end

我是否需要一些 javascript 脚本来执行此操作,或者仅通过调用控制器操作然后可能再次调用渲染就可以做到?

我很迷茫,感谢任何帮助!谢谢。

【问题讨论】:

【参考方案1】:

您可以使用 javascript 替换页面上的表格。您可以从 AJAX 请求中获取新表及其数据。 这可能会对您有所帮助:https://blog.codeship.com/unobtrusive-javascript-via-ajax-rails/

【讨论】:

不幸的是,我之前遇到过这种情况,但并没有真正帮助。现在我正试图弄清楚如何在单击表单按钮并且它不起作用时甚至只是做一个 javascript 警报。这个 javascript 代码应该在哪里,在我的 html 所在的同一视图目录中?谢谢。【参考方案2】:

要做AJAX必须有3个步骤

    客户端向服务器发送请求

    服务器进程收到来自客户端的请求,并将结果发送给客户端。

    客户端收到来自服务器的响应。构建新的 DOM HTML。

article 或许可以帮助您了解 ajax 的工作原理

【讨论】:

我并没有使用提交按钮发送任何数据,它只是作为 get_job 控制器操作的触发器 这意味着你不需要线路data: data_value 但是在你的控制器上,我看到job = find_job,但我不知道你如何找到工作? 只是一个返回作业的 SQL 查询。这为用户提供了一份新工作,该工作随后应显示在该工作表中 随机拍的?因为我看不出有什么条件可以接受。但没关系。在 ajax data: data_value 上,只需向服务器发送一个值,以帮助您处理它。例如,您发送一个 job_id: 1,然后在服务器上,它会找到一个 Id=1 的工作。但是在这里,您不需要它,只需删除该行即可。现在,在您的控制器上,只需向客户端发送响应 我尝试使用 form_tag 指定 :controller => job_controller, :action => get_job 但随后它尝试打开一个不存在且不应该存在的 get_job 视图,因为我只想让它停留在当前页面并重新加载表格,你知道如何绕过这个吗?另外,我需要什么样的 javascript 来更新这个表?你有例子吗?

以上是关于Rails - 当用户单击提交按钮时如何更新表中的数据的主要内容,如果未能解决你的问题,请参考以下文章

通过单击 Ruby on Rails 中的按钮生成表单

单击提交按钮时触发 Ajax 调用

如何根据单击的提交按钮选择父表单?

如何在Django中只在ModelForms表中正确提交一个表单?

Rails 5 ajax 表单:单击 Ajax 中的 2 个单选按钮之一提交表单

如何使用flex在Rails上提交多个模型?