代码之家  ›  专栏  ›  技术社区  ›  GhostRider

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

  •  0
  • GhostRider  · 技术社区  · 10 年前

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

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

        <%= 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_in维特”模板。我希望它呈现用户所在的页面。为了增加我的难度,我正在使用friendly_id……我尝试使用

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

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

    是否有一种“Rails方式”来捕获当前页面(忽略模态)并将其传递给呈现。。。。

    我希望这是清楚的。。。

    1 回复  |  直到 10 年前
        1
  •  1
  •   mgrim    10 年前

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

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

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

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

    清理js响应器 发送邀请 。这将默认呈现 send_invite.js 看法

         format.js { }
    

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