0

我有一个相当直截了当的问题。

在我的网站上,标题中有一个“邀请同事”链接到包含表单的模式:

    <%= 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 方式”。

我希望这很清楚...

4

1 回答 1

1

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

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

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

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

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

     format.js { }

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

于 2015-09-02T12:23:34.737 回答