在警报Devise中显示Ajax ResponseText

时间:2015-12-24 09:43:54

标签: ruby-on-rails devise

我问这个问题的原因是因为我不是百分之百确定我应该在实施方面做些什么,谷歌搜索可能让我有点不清楚,所以希望有人可以解释。

我有一个"添加到购物车"用于向控制器操作发出XHR请求的按钮,但此控制器具有before_filter authenticate_user!

class CartsController < ApplicationController
  before_action :authenticate_user!

  def add
    $redis.sadd current_user_cart, params[:image_id]
    render json: current_user.cart_count, status: 200
  end
end

要处理401我有这件CoffeeScript的重定向

$(document).on "ajaxError", (event, request, settings) ->
  if request.status == 401
  window.location.href = '/users/login'

此时request.responseText == You need to sign in or sign up before continuing.

该页面然后重定向到/users/login,我想显示此消息,因为我会发送任何其他其他Flash消息

<% flash.each do |key, value| %>
  <div class="dima-alert fade-in dima-alert-<%= key.to_s == 'notice' ? 'success' : 'error' %>" role="alert">
    <button type="button" class="close" data-dismiss="alert">&times;</button>
    <%= value if value.is_a?(String) %>
  </div>
<% end %>

如何通过重定向和显示在我的页面上来保持消息

由于

2 个答案:

答案 0 :(得分:0)

在javascript中,将响应消息添加为登录URL上的参数:

window.location.href = '/users/login?msg=' + encodeURIComponent(response);

然后在ruby中抓取来自URL参数的消息并将其添加到您的flash哈希:

flash["response-msg"] = params[:msg]

...之后它将显示在您拥有的flash.each循环中。

答案 1 :(得分:0)

我不使用ruby +设备,但你尝试过GET-Variable

window.location.href = '/users/login?message=yourMessageText' 

或作为路由

window.location.href = '/users/login/message/yourMessageText'