Rails: обновление базы данных на основе элемента DOM / jQuery

0

Я новичок в Rails и работаю над приложением викторины, и у меня проблемы с реализацией таймера. Когда пользователь создает новую викторину, контроллер вычисляет время, которое они задают, в зависимости от количества вопросов, 1 минута за вопрос, и это значение сохраняется в базе данных. Затем пользователь перенаправляется на первый вопрос викторины и начинается таймер. Они могут выбрать ответ с множественным выбором, а затем нажать "Далее", чтобы перейти к следующему вопросу. Проблема в том, что страница для следующего вопроса загружается, и таймер начинается, а не продолжает, где он остановился на предыдущей странице.

Таймер находится в javascript. Он реализован на мой взгляд как div:

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

Я могу получить доступ к текущему времени в моем файле.js.coffee (например, при нажатии "Next") с помощью

    $(".timer").countdown("getTimes")

Как я могу отправить это значение времени контроллеру/базе данных Rails, так как это объект javascript/jQuery?

Или я должен попробовать другой подход?

Благодарю!

  • 0
    Как таймер реализован в JS? Вы используете плагин JQuery? Также, когда нажимается Next, отправляется ли запрос на сервер или обрабатывается на стороне клиента с помощью JS (скрытие / скрытие) вопросов?
  • 0
    Таймер - это плагин jQuery ( keith-wood.name/countdown.html ), импортированный как гем ( github.com/mauriciopasquier/jquery-countdown-rails ) и добавленный через конвейер ресурсов (// = require jquery.countdown). При нажатии «Далее» ответ отправляется обратно на сервер, и следующий вопрос отображается на следующей странице с сервера (test / 1 / questions / 1 становится test / 1 / questions / 2)
Теги:
timer

2 ответа

0
Лучший ответ

Вы можете сохранить значение, возвращаемое кодом таймера JS, в поле ввода скрытого html и получить это значение как переменную формы при отправке формы.

Для получения дополнительной информации о скрытых входах: http://webdesign.about.com/od/htmltags/p/input-hidden-tag.htm

  • 0
    Да спасибо! Это отлично работает, я рассмотрю, что я сделал ниже.
0

Согласно руководству 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)

Время передается контроллеру через параметры [время отправки], и база данных обновляется. Когда отображается следующая страница, время заканчивается на предыдущей странице.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню