如何在不渲染或重定向的情况下显示消息(也称为闪存)

时间:2016-04-20 04:45:23

标签: ruby-on-rails

表单提交后,我的控制器会检查是否存在某些情况。就我而言,有三个:

  1. 如果用户最大限度地利用对象跟踪的可能性
  2. 如果用户已经跟踪此对象
  3. 一切正常,请求已添加到队列
  4. 我想告知用户这些情况。我有remote: true的表单,现在我通过渲染js: "alert('info')"显示信息,但它看起来很难看。我不想在表单提交后将用户重定向到某个地方或重新呈现表单。我只想显示“flash”消息并等待用户的另一个请求。我该怎么做?

2 个答案:

答案 0 :(得分:1)

  1. 简单方法:
  2. 在表单页面顶部,有一个div来存储消息:

    在控制器中远程请求的请求处理程序中,计算要显示的消息。

    def create
      ...
      @message = get_message
      ...
    end
    

    由于它是ajax请求,因此您的视图将是.js.erb文件(假设您使用的是erb)。在该视图中,只需将消息div内容设置为@message:

    # create.js.erb
    $('#message').text("#{@message}");
    
    1. 高级方法:
    2. 或者,如果您想要更丰富的格式,请为消息格式创建一个部分并在js.erb文件中呈现它。

      例如,我使用bootstrap作为我的样式,我可以使消息看起来像一个带有'x'的警报来关闭它 - 所以我创建了一个部分来呈现警报:

      # views/home/_message.html.erb
      <div class='alert alert-warning alert-dismissible'>
        <%= message %><button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>   
      </div>
      

      在你的js.erb中,你可以这样做,

      # create.js.erb
      $("#message").html("<%= escape_javascript(render partial: 'home/message', locals: { message: @message } ) %>"); 
      

答案 1 :(得分:0)

如果您想使用remote ajax请求,则需要在前端自行处理响应。如果你想让它看起来很漂亮,你需要在你的页面上设计一个弹出模式窗口或某种显示块来显示一条消息。将其设为style='display:none'为默认值。

然后你需要编写一个JS方法来显示它并返回该方法。像这样的东西。 (假设你正在使用jQuery)

$('#messageblockid .content').text("your message goes here");
$('#messageblockid').show();