关于Ajax成功Rails的Flash注意事项

时间:2014-05-08 05:43:46

标签: jquery ruby-on-rails ruby ajax

我想在某些条件下在我的html页面中收到一条flash消息。我是Ruby的新手,我不知道如何使这项工作。

这是我的控制器

     if @item_point > current_user.points
        flash[:alert] = "You don't have enough points to buy this item"
      else
      end
      respond_to do |format|
        format.html {redirect_to '/hhr'}
        format.js
      end 

并且在我的脚本中我试图在我的ajax成功函数中得到它..但是我无法得到它..有什么方法可以在我的jquery函数或我的视图中获取此flash消息。 请帮助。 提前谢谢

2 个答案:

答案 0 :(得分:1)

请参阅以下代码。它可能会帮助你

#inside your rails controller method  
flash[:notice] = "Your Notice content to be displayed"



#rails helper
module ApplicationHelper
  def flash_notifications
    message = flash[:error] || flash[:notice]

    if message
      type = flash.keys[0].to_s
      javascript_tag %Q{$.notification({ message:"#{message}", type:"#{type}" });}
    end
  end

end



#rails layout
<%= flash_notifications -%>



#javascript code
(function( $, undefined ) {
    $.notification = function(options) {
        var opts = $.extend({}, {type: 'notice', time: 3000}, options);
        var o    = opts;

        timeout          = setTimeout('$.notification.removebar()', o.time);
        var message_span = $('<span />').addClass('jbar-content').html(o.message);
        var wrap_bar     = $('<div />').addClass('jbar jbar-top').css("cursor", "pointer");

    if (o.type == 'error') {
          wrap_bar.css({"color": "#D8000C"})
        };

        wrap_bar.click(function(){
            $.notification.removebar()
        });

        wrap_bar.append(message_span).hide()
            .insertBefore($('.container')).fadeIn('fast');
    };


    var timeout;
    $.notification.removebar    = function(txt) {
        if($('.jbar').length){
            clearTimeout(timeout);

            $('.jbar').fadeOut('fast',function(){
                $(this).remove();
            });
        }   
    };


})(jQuery);

答案 1 :(得分:1)

你应该看看这个:

Jquery AJAX: How to display the Flash error message when validation on the server side fails?

它建议从Rails应用程序返回HTML错误状态,然后您可以在Ajax'错误'回调中添加flash [:alert]。