如题目所述,我想知道使用flash[:error]
, flash[:alert]
和flash[:notice]
是否有区别。如果是,什么时候使用它们是合适的,为什么?
flash是一种Rails机制,用于在两个请求之间持久化一些信息。你在一个请求中设置了一些flash散列,它在你从同一个客户端收到的下一个请求中可用。
因为flash只是一个"哈希",你可以像使用哈希一样使用它。这意味着您可以提供首选键(:alert/:error/:notice),并将您希望的任何消息字符串作为值。
使用什么或何时使用:alert/:error/:notice的语义实际上由您来管理。话虽如此,一般的最佳实践是使用:notice当事情是好的,并以绿色色调显示,并使用:error当事情是不好的,并以红色色调显示。如果你想在你的web应用程序上使用:alert作为另一种类型的消息,这是完全可以的。我以前在黄色色调中使用过它。
:alert
和:notice
在功能上与您发明的其他键不同。FlashHash
为这两者提供了方便的访问器:flash.alert
、flash.notice
。Rails对这两种类型的偏好进一步延伸到redirect_to
,它只接受:alert
、:notice
或:flash
。
然而,2012年7月提交到edge Rails允许添加其他flash类型的特权。下面是一个在Rails 4中添加自定义flash类型的示例:
# app/controllers/application_controller.rb
class ApplicationController; add_flash_types(:error, :annoyance); end
# app/controllers/monopoly_controller.rb
class MonopolyController < ApplicationController
def chance
...
redirect_to haha_path, annoyance: "Go directly to jail. Do not pass Go. Do not collect $200."
end
end
# app/views/haha/index.html.erb
<%= annoyance %>
这只是一个分类。它会生成div #错误。错误或div#通知。注意,在
上面连接了所需的逻辑小样本:
.alert, .error, .notice, .success { padding:.8em 0; margin:0 0 2px 0; border:2px solid #ddd; font-size:1.6em; text-align:center;}
.error { background:#FBE3E4;color:#8a1f11;border-color:#FBC2C4; }
.notice { background:#FFF6BF;color:#514721;border-color:#FFD324; }
.success { background:#DDFCD5;color:#000;border-color:#44A815; }
.alert { background:#FBE3E4;color:#8a1f11;border-color:#FBC2C4; }
.error a {color:#8a1f11;}
.notice a {color:#514721;}
.success a {color:#264409;}
.alert a {color:#8a1f11;}
它们只是不同的分类。我主要使用:error
和:notice
。请注意,我将其用于信息性消息("您的密码已更改"、"更改已保存"等)。我为重要的事情/问题("您的密码不匹配","登录失败"等)保留:error
我还使用:message
类来传递捕获在异常处理程序中的StandardError
消息。使用2或3个类允许您在响应单个事件或结果时显示最多相同数量的消息,每个类传达结果的不同方面,例如信息,基于应用程序所知道的错误和基于系统所知道的错误。