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