【问题标题】:Displaying flash messages in rails if controller is called from jquery如果从 jquery 调用控制器,则在 rails 中显示 flash 消息
【发布时间】:2013-01-11 04:39:59
【问题描述】:

在我的应用程序中,我有一个带有一些代码的控制器操作..

users_controller.rb

   def my_method(age)
     if age >18
      flash[:notice]= "You are eligible."
     else
      flash[:notice]= "You are not eligible."
     end
    end

我正在通过 jquery 调用 my_method...(编码在 jquery 对话框的提交按钮上)

 jQuery.post('/users/my_method/', { age: jQuery('#age').val() });

但它没有显示闪存消息,但在日志中我看到正在调用方法“my_method”。告诉我如何显示这些 Flash 消息?

【问题讨论】:

    标签: jquery ruby-on-rails jquery-ui


    【解决方案1】:

    由于这是一个 ajax 请求,您必须通过 json 处理响应(通过 rjs 或其他方式)。

    下面的代码会给你一个例子(这是我的实际工作代码之一)

    例如:添加新朋友

    #friends_controller.rb
    class FriendsController < ApplicationController
      #<other methods>
      def create
        @friend = Friend.new(params[:friend])
        if @friend.save
          flash.now[:success] = ["Friend request successfully sent"]
          respond_to do |format|
            format.js
          end
        else
           render action: "new"   
        end
      end
    end
    
    #view/friends/_form.html.erb
    <%= form_for @friend, :remote => true do |f| %>
     #code
    <% end %>
    
    #view/friend/create.js.erb
    $("#message_id").html("<%= escape_javascript raw(flash_display) %>");
    
    note : flash_display is a helper method I used to display my messages
    
    #helpers/application_helper.rb
    
    def flash_display
        response = "<div class='alert #{alert_class}'>"
        response += "<button type='button' class='close' data-dismiss='alert'>x</button>"
        flash.each do |name, msg|
          msg.each do |m|
            response = response + content_tag(:p, m)  
          end
        end
        response += "</div>"
        flash.discard
        response
    end
    

    【讨论】:

    • message_id 将成为布局中的控制器(div 或其他)?
    • 它是消息显示html的div id :)
    【解决方案2】:

    Ajax 响应通常不会利用 Flash 消息。相反,请查找 json 中的错误。这将使您开始...

    http://travisjeffery.com/b/2012/04/rendering-errors-in-json-with-rails/

    【讨论】: