def destroy
@cart.destroy if @cart.id == session[:cart_id]
session[:cart_id] = nil
respond_to do |format|
format.html { redirect_to store_url,
notice: 'Your cart is currently empty' }
format.json { head :no_content }
end
end
我正在通过使用Rails 4的敏捷Web开发工作,在整本书中,他们让您创建一个带有购物车的网站。我要做的是确保在您清空购物车时弹出的通知消息在几秒钟后消失。目前,通知消息会一直保留在屏幕上,直到您刷新为止。我需要做些什么来确保这一点?我已经尝试过使用Javascript并创建一个.js.erb文件,但是,我似乎无法正确使用它。
答案 0 :(得分:1)
为此你需要使用一些javascript。
最简单的方法是执行以下操作:
第1步:修改Flash消息输出
打开application.html或在您呈现Flash消息时,将它们包装在<div id="flash-messages">
元素中。
例如,如果你有这个:
<% flash.each do |name, msg| %>
<% if msg.is_a?(String) %>
<%= content_tag :div, msg, :class => "flash_#{name}" %>
<% end %>
<% end %>
以这种方式包裹它们:
<div id="flash-messages">
<% flash.each do |name, msg| %>
<% if msg.is_a?(String) %>
<%= content_tag :div, msg, :class => "flash_#{name}" %>
<% end %>
<% end %>
</div>
第2步:使用一小段Javascript删除Flash消息
在assets/javascript/application.js
内,添加以下代码:
$(function(){
var flashDurationInSeconds = 5;
var flashContainerId = 'flash-messages';
function removeFlashMessages() {
$('#' + flashContainerId).remove();
}
setTimeout(removeFlashMessages, flashDurationInSeconds * 1000);
})
将flashDurationInSeconds
更新为您需要的持续时间,并flashContainerId
更新您在步骤1中添加的ID。
完成!强>
这样,每个flash消息只会持续5秒,如你所愿。