Перенаправление / рендеринг модальных с ajax в рельсах - PullRequest
0 голосов
/ 12 февраля 2020

У меня есть одно приложение rails, в котором мне нужно проверить, не авторизован ли пользователь при использовании определенной страницы, тогда на той же странице должно отображаться модальное имя входа и фон должен исчезнуть.

Для этого, У меня есть один метод с именем authenticate user в контроллере приложения

def authenticated_user
 if user
 else
  # from here I want to open a sign in modal
 end
end

Мой текущий метод sessions/new следующий,

class SessionsController < ApplicationController
  def new
   respond_to do |format|
      format.html
      format.js
    end
  end
end

У меня также есть новый. js .erb в папка сессий в представлениях,

$("#modal-window").find(".modal-content").html("<%= escape_javascript( render 'sessions/new', formats: [ :html ]) %>");
$("#modal-window").modal();

Я попытался отправить запрос ajax со следующим,

redirect_to sessions_path(format: :js)

, но вместо этого он перенаправляет меня тоже http://localhost:3000/reader/login.js вместо того, чтобы открывать модальное на том же самом стр.

1 Ответ

0 голосов
/ 12 февраля 2020

Из моего предыдущего опыта это не может быть достигнуто с помощью redirect_to sessions_path(format: :js)

Вы можете попробовать следующее:

Для before_action

def authenticated_user
  if user
  else
    if request.xhr?
      render :authenticated_user and return
    else
      redirect_to request.env['HTTP_REFERER'], flash: { authenticated_user: true }
    end
  end
end

В файле макета:

...
- if flash[:authenticated_user]
  <%= render 'authenticated_user_modal' %>
...

authenticated_user. js .erb

<% html = capture do %>
  <%= render 'authenticated_user_modal' %>
<% end %>

$('body').append('<%=j html %>');
$('#modal-window').modal();
# add a method that remove the modal after close it.
# $(document).on('close-modal', '#modal-window', function () {
#   $('#modal-window').remove();
# });

_authenticated_user_modal. html .erb

<div id="modal-window">
  ...
</div>

:javascript
  $('#modal-window').modal();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...