У меня есть метод check_login
, реализованный в ApplicationController
, который перенаправляет пользователя на экран входа в систему, если время его сеанса истекло.
Но на моем экране есть вкладка с несколькими вложенными вкладками - когдапользователь нажимает на любую из вложенных вкладок, отображается шаблон erb
.
После истечения времени ожидания сеанса, когда пользователь нажимает на любую из вложенных вкладок, вызывается соответствующий шаблон erb
для этой вложенной вкладки;но никто из них не попал в контроллер.Следовательно, мой check_login
метод не вызывается, и пользователь не перенаправляется на экран входа в систему.
Как я могу исправить эту проблему?
Это проверка тайм-аута сеанса, которую я установил в моем ApplicationController
:
class ApplicationController < ActionController::Base
before_action :check_login, :apply_layout
def check_login
logger.info "ApplicationController check_login"
if session[:current_user]
set_current_user
else
render :partial => 'sessions/login.html.erb'
end
end
Это erb
код вкладки, на которую я ссылался, которая содержит несколько вложенных вкладок:
<div class="container-fluid">
<div id="message" style="background-color:limegreen"> </div>
<div id="error_message" style="background-color:#FF1133"> </div>
<div class="row">
<div class="col-12">
<ul class="nav nav-pills" style=" margin-top: 20px; ">
<li class=" cfs nav-item active">
<a data-toggle="tab" class="nav-link active" href="#dbr">
Application SubTab 1
</a>
</li>
<li class="cfs nav-item">
<a data-toggle="tab" href="#dtr" class="nav-link">
Application SubTab 2
</a>
</li>
<li class="cfs nav-item">
<a data-toggle="tab" href="#cpl" class="nav-link">
Application SubTab 3
</a>
</li>
</ul>
</div>
</div>
</div>
<div class="tab-content tabstyle" >
<div id="dbr" class="tab-pane fade show active" >
<%= render 'application_subtab1/table' %>
</div>
<div id="dtr" class="tab-pane fade">
<%= render 'application_subtab2/table' %>
</div>
<div id="cpl" class="tab-pane fade">
<%= render 'application_subtab3/table' %>
</div>
</div>
<script type='text/javascript'>
$(function() {
$(document).on("click", "#dbr", function(event){
$.ajax( {
type: 'GET',
url: "/application/check_login"
dataType: 'script'
});
});
});
</script>
Когда вызываются вышеприведенные erb
или erb
вложенных вкладок, есть ли способ вызвать контроллер для выполнения моего check_login
?
Или следуетЯ делаю что-то еще, как чистый подход?
Каково решение этой проблемы?
Пожалуйста, помогите!
Я попытался добавить приведенный ниже вызов ajax в эрб, показанный выше:
<script type='text/javascript'>
$(function() {
$(document).on("click", "#dbr", function(event){
$.ajax( {
type: 'GET',
url: "/application/check_login"
dataType: 'script'
});
});
});
</script>
Но этот вызов ajax не вызывает метод check_login
.Что не так в этом вызове ajax?