Javascript Rails:基于DOM元素/jQuery更新数据库

Javascript Rails:基于DOM元素/jQuery更新数据库,javascript,jquery,ruby-on-rails,timer,Javascript,Jquery,Ruby On Rails,Timer,我是Rails新手,正在开发测验应用程序,在正确实现计时器方面遇到了问题。当用户创建一个新的测验时,控制器根据问题的数量(每个问题1分钟)计算给他们的时间,该值存储在数据库中。然后,用户被重定向到第一个测验问题,计时器启动。他们可以选择一个多选答案,然后单击“下一步”转到下一个问题。问题是,下一个问题的页面已加载,计时器将重新启动,而不是继续上一页上停止的地方 计时器是用javascript编写的。在我看来,它是作为一个div实现的: <%= content_tag "div",

我是Rails新手,正在开发测验应用程序,在正确实现计时器方面遇到了问题。当用户创建一个新的测验时,控制器根据问题的数量(每个问题1分钟)计算给他们的时间,该值存储在数据库中。然后,用户被重定向到第一个测验问题,计时器启动。他们可以选择一个多选答案,然后单击“下一步”转到下一个问题。问题是,下一个问题的页面已加载,计时器将重新启动,而不是继续上一页上停止的地方

计时器是用javascript编写的。在我看来,它是作为一个div实现的:

    <%= content_tag "div", class: "timer", data: {time: @time} do %><% end %>
既然Rails控制器/数据库是javascript/jQuery对象,我如何将这个时间值发送到它

还是我应该尝试一种完全不同的方法


谢谢

您可以将JS计时器代码返回的值存储在隐藏的html输入字段中,并在提交表单时将该值作为表单变量检索


有关隐藏输入的更多信息:

根据DevDude的指导,一个隐藏输入字段解决了这个问题

“我的视图”的“内容”标签中有计时器 隐藏的输入被放置在表单中。 提交按钮有一类“导航时间”来调用coffeescript。 show.html.erb

<%= content_tag "div", class: "timer", data: {time: @time} do %><% end %>

<%= form_tag . . . %>
.
.
<input type="hidden" name="time-submitted" value="">
.
.
<%= submit_tag "Next", class: "nav-time"%>
<%end%>

时间通过参数[time submitted]传递给控制器,并更新数据库。当呈现下一个页面时,时间就是上一个页面上停止的时间。

如何在JS中实现计时器?您正在使用jQuery插件吗?单击Next时,还需要发送服务器请求或通过JS(隐藏/取消隐藏)在客户端处理问题?计时器是一个jQuery插件(),作为gem()导入,并通过资产管道(//=require jQuery.countdown)添加。单击“下一步”时,答案将发送回服务器,并在下一页显示来自服务器的下一个问题(test/1/questions/1变为test/1/questions/2)是的,谢谢!这非常有效,我将在下面回顾我所做的。
<%= content_tag "div", class: "timer", data: {time: @time} do %><% end %>

<%= form_tag . . . %>
.
.
<input type="hidden" name="time-submitted" value="">
.
.
<%= submit_tag "Next", class: "nav-time"%>
<%end%>
jQuery ->
  $('.nav-time').on 'click', (event) ->
    times = $(".timer").countdown("getTimes")
    $('input[name="time-submitted"]').val(times)