Передача образцового атрибута к представлению Rails с помощью redirect_to

У вас будет два варианта для реализации этого:

Вариант 1: Использование события window.beforeunload. ссылка

$('.popup-link').click(function() {
  showPopup();
  $(window).on("beforeunload", hidePopup);
});

$('.popup-close').click(hidePopup);

function hidePopup() {
  $(window).off("beforeunload", hidePopup);
  $('.popup').removeClass('active');
}

Демо


Вариант 2: Использование API истории HTML5. Ссылка

$('.popup-link').click(function() {
  showPopup();
  window.history.pushState('popup-open', null, '');
  $(window).on('popstate', hidePopup);
});

$('.popup-close').click(function() {
  if(history.state == 'popup-open')  {
    window.history.back();
  }
  hidePopup();
});

function hidePopup() {
    $(window).off('popstate', hidePopup);
    $('.popup').removeClass('active');
}

Демо


Редактировать : Суджумаи Идея тоже довольно хорошая. Демо

Кроме того, я рекомендую регистрировать события popstate / beforeunload только при необходимости и отменять их регистрацию, когда они вам больше не нужны, чтобы избежать накладных расходов.

5
задан Mike Woodhouse 22 March 2009 в 08:24
поделиться

3 ответа

edit_report_path генерирует URL с идентификатором @report в нем.

redirect_to по существу создает совершенно новый запрос и переходит к тому URL. Когда это добирается до edit, все, что это имеет, является идентификатором. Обычно это прекрасно - это ищет объект и продолжает идти, но конечно это не будет иметь поле недб, которое Вы устанавливаете.

Существует пара способов зафиксировать это. Можно использовать: представьте вместо этого для получения до страницы редактирования - затем @report, установят поле.

@report.mode = "t"
render :action => edit and return

Или, можно сделать mode поле базы данных.

3
ответ дан 14 December 2019 в 19:26
поделиться

Проблема здесь находится в redirect_to. Когда Вы перенаправляете где-то в другом месте все переменные экземпляра, потеряны. Таким образом, когда Вы устанавливаете @report.mode = "t" это устанавливает атрибут. Но то, когда Вы перенаправляете те данные, потеряно.

Я принимаю <%= build_report(@report.mode) %> находится в edit_report.html.erb и коде от того, когда Вы устанавливаете 'режим', не находится в действии редактирования. Если это верно, Вы можете передавать report.mode к действию редактирования в URL как так:

 build_report(@report.mode, :mode => "t")
2
ответ дан 14 December 2019 в 19:26
поделиться

Проблема redirect_to; Вы возвращаете ответ клиенту, который заставляет его восстанавливать запрос с другим URL. В том втором запросе не установлен режим, потому что Вы не сохранили его перед оборачиванием первого запроса.

0
ответ дан 14 December 2019 в 19:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: