Вы будете не быть в состоянии потянуть "окно подтверждения" из контроллера, и к тому же вы будете лучше всего поставить ваш код непосредственно в ApplicationController
:
#app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
before_filter :some_method
private
def some_method
...
end
end
Проблема заключается в том, что в запросе HTML есть, чтобы загрузить новую страницу. Браузер ожидает, что ответ будет отформатирован HTML, который он будет использовать для заполнения нового представления.
Если вы пытаетесь показать «окно подтверждения» через этот поток, вы будете должны использовать JavaScript/JQuery (перед обновлением), или вы будете иметь, чтобы сделать весь «подтверждение» страницу:
-
Если вы хотите использовать метод подтверждения JS, вы должны использовать onbeforeunload
вызов:
Displaying a confirm dialog box when the user tries to refresh/close/navigate to another web page
window.onbeforeunload = function (e) {
e = e || window.event;
// For IE and Firefox prior to version 4
if (e) {
e.returnValue = confirm("Really?");
}
// For others
return confirm("Really?");
};
Это покажет простую коробку «confiramtion» JS (ok
/cancel
), которая позволяет вам определить рост.
-
Если вы хотите использовать действие контроллера, вы должны отобразить страницу подтверждения в виде отдельного запроса HTML:
#app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
before_filter :confirmation, if: Proc.new{ |c| !c.request.xhr? }
private
def confirmation
if request.get?
@page = request.referrer
elsif request.post?
render request.referrer
end
end
end
#app/views/application/confirmation.html.erb
<%= button_to "Really?", confirmation_path %>
Я не использовал ajaxify_rails
перед тем , но я уверен, что Turbolinks делает то же самое ...
Turbolinks делает следующие ссылки в лету ур веб-приложений быстрее. Вместо того чтобы позволить браузеру перекомпилировать JavaScript и CSS между каждой сменой страницы, он сохраняет текущий экземпляр страницы живым и заменяет только тело (или части) и заголовок в голове. Подумайте о CGI против постоянного процесса.
По умолчанию все приложения Rails поставляются в комплекте с turbolinks
(это может раздражать, если вы не знаете, как его кодировать).
Таким образом, если у вас возникнут проблемы с вашим подходом, вы можете вернуться к Turbolinks, устранив большую часть проблемы для вас.
Rails имеет встроенный помощник для такого рода вещей, но только при отправке форм. Если вы хотите включить это в опубликованных формах, см. Этот ответ: http://stackoverflow.com/a/15771639/3270759. –
@SamDavies Привет, спасибо за предложение. Я хочу, чтобы конформация появлялась при перезагрузке каждой страницы, и каждая страница может не иметь формы. – Abhi