RAILS 4: 尝试获取当前页面以在 AJAX 请求中呈现

RAILS 4: Trying to get the current page to pass to render in an AJAX request

我有一个相当直接的问题。

在我的网站上,header 是一个 "invite a colleague" link 到包含表单的模式:

    <%= 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 让它工作。问题是当我打开模式并尝试通过 AJAX 发送时 "current_page" 指的是 "send_invite" 操作并且正在寻找 "send_invite" 模板。我希望它呈现用户所在的任何页面。为了增加我的难度,我正在使用 friendly_id.....我尝试使用

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

尝试从当前页面路径中提取用户操作,但显然这不适用于友好的 id。

是否有 "Rails way" 捕获当前页面(忽略模式)并将其传递给渲染....

我希望这是清楚的...

AJAX 调用不会触发当前页面的完全重新加载(除非明确告知)。该请求由 javascript 在后台处理。

在您的情况下,您应该添加一个名为 send_invite.js.erb 的视图(我想在您的 app/views/users 文件夹中 - 假设 send_invite 属于 UsersController),其中包含一些 javascript 通知用户邀请成功并关闭模式。这个视图可以简单到:

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

如果(并且每次)AJAX 调用成功,将执行此脚本。

清理 send_invite 中的 js 响应程序。这将默认呈现 send_invite.js 视图。

     format.js { }

http://guides.rubyonrails.org/working_with_javascript_in_rails.html#a-simple-example