表单提交后,我的控制器检查是否存在某些条件。就我而言,有三种:
- 如果用户能够最大限度地丰富其物体跟踪的可能性
- 如果用户已经跟踪此对象
- 一切正常,请求被添加到队列中
我想通知用户这些情况。我有remote: true
的表单,现在我通过渲染js: "alert('info')"
来显示信息,但它看起来很难看。我不想将用户重定向到某个位置,也不想在表单提交后重新提交表单。我只想显示"flash"消息,然后等待用户的另一个请求。我该怎么做?
- 简单方法:
在表单页面的顶部,有一个div来存储消息:
在控制器中远程请求的请求处理程序中,计算要显示的消息。
def create
...
@message = get_message
...
end
由于这是一个ajax请求,您的视图将是一个.js.erb文件(假设您使用的是erb)。在该视图中,只需将消息div内容设置为@message:
# create.js.erb
$('#message').text("#{@message}");
- 高级方法:
或者,如果您想要更丰富的格式,请为消息格式创建一个分部,并在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">×</span></button>
</div>
在你的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();