rails 4 - обновить атрибут с помощью кнопки «Назад» браузера только при выходе с веб-страницы

Я пытаюсь отследить, какую страницу посещает пользователь и когда пользователь получает доступ и уходит. Я успешно сохраняю время доступа, следуя советам в как изменить базу данных значения со ссылкой. Вот поток:

  • (в представлении А) пользователь нажимает кнопку на странице А
  • (в действии B) создать новую запись для хранения времени доступа
  • (в действии B) перенаправление на страницу B

Но когда я хочу применить этот метод для хранения времени отпуска, у меня возникают некоторые проблемы. Я хочу обновить время, когда пользователь покидает страницу, на запись, которую я только что создал. Вышеупомянутый метод работает только тогда, когда пользователь нажимает кнопку «Назад», которую я создаю на веб-странице.

Если пользователь нажмет кнопку «Назад» браузера, он ничего не сделает. Я предполагаю, что причина, по которой update_attribute не работает, заключается в том, что ruby ​​on rails не вызывает действие в контроллере, пока нажата кнопка «Назад» в браузере..... Как это может работать, когда пользователь нажимает кнопку «Назад» в браузере?

Поток может быть примерно таким:

  • (в viewB) пользователь нажимает кнопку «Назад» на странице B ИЛИ нажимает кнопку «Назад» в браузере
  • (в действии) обновить время отпуска
  • (в действии A) перенаправление на страницу A

обзор.html.erb

# while click the "Back" button, redirect to "store" and update leave time for the record just create
<%= button_to "Back", {:action=>"stores", :user=>@product.user, :order=>@product.order}, :method=>:get %>

контроллер.rb

def store
    @user = params[:user]
    @order = params[:order]
    @lastevent = Event.where(:user=>@user).order("id").last
    @lastevent.update_attributes!(:leave_time => Time.now)
end

person Chen Shirley    schedule 11.11.2015    source источник


Ответы (1)


Используйте javascript для решения:

$(window).on("navigate", function (event, data) {
  var direction = data.state.direction;
  if (direction == 'back') {
    <% update_method_helper %>
  }      
});

используйте его как партиал и вызывайте его на каждой странице, которую вы хотите использовать (если вы хотите, чтобы все страницы использовали его в макете).

person matanco    schedule 11.11.2015
comment
Я поместил этот скрипт на страницу, на которую я перенаправляюсь, но, похоже, ничего не произошло. Что такое update_method_helper? У меня есть неопределенная локальная переменная или метод, поэтому я меняю действие на то, что хочу, это правильно? (Вместо этого я поставил эти две строки: @lastevent = Event.where(:user=>@user).order("id").last @lastevent.update_attributes!(:leave_time => Time.now) - person Chen Shirley; 11.11.2015
comment
Я также пытаюсь поместить этот скрипт на страницу, которую я покидаю, update_attribute работает, но он работает каждый раз, когда я открываю эту страницу, а не когда я нажимаю кнопку «Назад» и покинуть эту страницу..... .Я делаю что-то неправильно? - person Chen Shirley; 11.11.2015
comment
кажется, у тебя все хорошо - person matanco; 11.11.2015
comment
Спасибо за ваш быстрый ответ. Я хочу, чтобы update_attribute работал только при выходе с веб-страницы (нажмите кнопку «Назад» в браузере), но этот скрипт работает напрямую, когда я открываю веб-страницу...... Можно ли делать то, что я хочу, с помощью javascript? ? - person Chen Shirley; 11.11.2015