RAILS 4: Попытка заставить текущую страницу пройти для рендеринга в AJAX-запросе

У меня довольно прямой вопрос.

На моем сайте в шапке есть ссылка "пригласить коллегу" на модал, которая содержит форму:

    <%= simple_form_for(current_user, :url => send_invite_user_path(current_user), remote: true) do |f| %>
        <%= f.label :email %><br>
        <%= f.text_field :email, class: 'form-control' %>
        <%= f.submit "Send", class: "btn btn-primary ShareSend" %>
    <% end %>

Вот контроллер отправки приглашения

 def send_invite
   @current_page = URI(request.referer).path
   @email = params[:user][:email]
   InviteWorker.perform_async(current_user.id, @email)
   respond_to do |format|
      flash.now[:success] = "Invite sent"
      format.html { redirect_to @current_page, :current_page => @current_page}
      format.js { render @current_page}
    end
  end

Он прекрасно работает, когда не используется AJAX, но я хочу попробовать заставить его работать через AJAX. Проблема в том, что "current_page", когда я открываю модальное окно и пытаюсь отправить через AJAX, ссылается на действие "send_invite" и ищет шаблон "send_invite". Я хочу, чтобы он отображал страницу, на которой находится пользователь. Чтобы добавить к моей трудности, я использую friendly_id..... Я пытался использовать

   @page_hash = Rails.application.routes.recognize_path(URI(request.referer).path)

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

Есть ли "способ Rails" для захвата текущей страницы (игнорируя модальные) и передачи этого для рендеринга....

Я надеюсь, что это понятно...

1 ответ

Решение

Вызов AJAX не запускает полную перезагрузку текущей страницы (если это явно не указано). Запрос обрабатывается в фоновом режиме с помощью JavaScript.

В вашем случае вы должны добавить представление под названием send_invite.js.erb (я думаю, в вашем app/views/users папка - при условии, что send_invite принадлежит UsersController), который имеет некоторый JavaScript, который уведомляет пользователя об успешном приглашении и закрывает модальное. Это представление может быть простым:

alert("Invite sent!");window.closeMyInviteModal();

Этот скрипт будет выполнен, если (и каждый раз) вызов AJAX будет успешным.

Очистить JS респондента в send_invite, Это будет по умолчанию визуализировать send_invite.js Посмотреть.

     format.js { }

См. http://guides.rubyonrails.org/working_with_javascript_in_rails.html

Другие вопросы по тегам