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

表单提交后,我的控制器检查是否有一些条件 就我而言,有三个:

  1. 如果用户最大限度地利用对象跟踪的可能性
  2. 如果用户已经跟踪此对象
  3. 一切正常,请求被添加到队列中

我想告诉用户这些条件。 我有remote: true表单remote: true ,现在我通过渲染js: "alert('info')"显示信息js: "alert('info')"但它看起来很难看。 我不想在表单提交后将用户重定向到某个地方或重新呈现表单。 我只想显示“flash”消息并等待用户的另一个请求。 我该怎么做?

  1. 简单方法:

在表单页面的顶部,有一个div来存储消息:

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

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

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

 # create.js.erb $('#message').text("#{@message}"); 
  1. 高级方法:

或者,如果您想要更丰富的格式,请为消息格式创建一个部分,并在js.erb文件中呈现它。

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

 # views/home/_message.html.erb 
<%= message %>

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

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

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

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

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