Я новичок в Rails и работаю над приложением викторины, и у меня проблемы с реализацией таймера. Когда пользователь создает новую викторину, контроллер вычисляет время, которое они задают, в зависимости от количества вопросов, 1 минута за вопрос, и это значение сохраняется в базе данных. Затем пользователь перенаправляется на первый вопрос викторины и начинается таймер. Они могут выбрать ответ с множественным выбором, а затем нажать "Далее", чтобы перейти к следующему вопросу. Проблема в том, что страница для следующего вопроса загружается, и таймер начинается, а не продолжает, где он остановился на предыдущей странице.
Таймер находится в javascript. Он реализован на мой взгляд как div:
<%= content_tag "div", class: "timer", data: {time: @time} do %><% end %>
Я могу получить доступ к текущему времени в моем файле.js.coffee (например, при нажатии "Next") с помощью
$(".timer").countdown("getTimes")
Как я могу отправить это значение времени контроллеру/базе данных Rails, так как это объект javascript/jQuery?
Или я должен попробовать другой подход?
Благодарю!
Вы можете сохранить значение, возвращаемое кодом таймера JS, в поле ввода скрытого html и получить это значение как переменную формы при отправке формы.
Для получения дополнительной информации о скрытых входах: http://webdesign.about.com/od/htmltags/p/input-hidden-tag.htm
Согласно руководству DevDude, для решения этой проблемы работало скрытое поле ввода.
У моего представления есть таймер в "content_tag". Скрытый ввод помещается в форму. Кнопкам отправки предоставляется класс "nav-time" для вызова в 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%>
Кофейня обновляет значение скрытого поля.
timed_test.js.coffee
jQuery ->
$('.nav-time').on 'click', (event) ->
times = $(".timer").countdown("getTimes")
$('input[name="time-submitted"]').val(times)
Время передается контроллеру через параметры [время отправки], и база данных обновляется. Когда отображается следующая страница, время заканчивается на предыдущей странице.