Логика Ruby в заголовке не работает корректно при использовании redirect_to после входа в систему (с jquery mobile) - PullRequest
0 голосов
/ 06 марта 2012

Обновление: проблема ниже возникает, когда я добавляю:

<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>

Я пытаюсь перенаправить на целевую страницу после того, как пользователь вошел в систему, но переменные, которые я установил в application_controller.rb, не отражаются на странице, на которую я перенаправляю.

Мой сеанс_controller.rb выглядит так:

def create
  user = User.find_by_email(params[:email])
  if user && user.authenticate(params[:password])
    session[:user_id] = user.id
    redirect_to '/landingpage', :notice => "Logged in!"

Мой application.html.erb выглядит так

<!DOCTYPE html>
<html>
<head>
    <%= yield :head %>       
</head>
<body>
    <%= yield :body1%>
</body>

Мой вид целевой страницы выглядит так:

<% content_for :head do %>
    <% if current_user %>
       <script>'function test(){alert('user is signed in')}'</script>
    <% else %>
       <script>'function test(){alert('user is not signed in')}'</script>
    <% end %>
<% content_for :body1 do %>
    <% if current_user %>
       User is signed in 
    <% else %>
      User is not signed in
    <% end %>
    <button onClick="test();">test</button>
<% end %>

Результат: После входа на странице отображается «Пользователь вошел в систему», но функция по-прежнему возвращает пользователя, не вошедшего в систему. Однако, если я нажимаю кнопку «Обновить» в браузере, он загружает все правильно .

Я пытаюсь понять, почему использование перенаправления не обновляет информацию заголовка.

Ответы [ 2 ]

0 голосов
/ 07 марта 2012

Проблема была связана с jquery mobile, вот решение, которое сработало:

<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
<!-- Enter this section between the the .js links --> 
<script type="text/javascript">
    $(document).bind("mobileinit", function(){
        $.mobile.ajaxEnabled = false;
    });
</script>
<!-- End section -->
<script src="http://code.jquery.com/mobile/1.1.0-rc.1/jquery.mobile-1.1.0-rc.1.min.js"></script>
0 голосов
/ 06 марта 2012

Должно работать, если у вас ниже путь. Вы можете вставить свой <% content_for :head do %> код?

Вы должны поместить yield yield в макет, и шаблон каждого представления - это то место, куда вы помещаете блок content_for.

В app / views / layouts / application.html.erb put

<!DOCTYPE html>
<html>
<head>
    <%= yield :head %>
</head>
<body>
    <%= yield :body1 %>
    <%= yield %>
</body>

Затем в каждом представлении вы можете сделать это:

<% content_for :head do %>
  <h1>My Header!</h1>
<% end %>

<% content_for :body1 do %>
    <h3>Body1</h3>
<% end %>

<h3>The rest of the page</h3>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...