即时通讯使用twitters bootstrap警报消息。在我的application.html.erb中我有......
<% flash.each do |key, value| %>
<div class="alert alert-<%=key%>">
<a class="close" data-dismiss="alert">×</a>
<%= value %>
</div>
<% end %>
通常当我想做一个flash消息时,我会写一些类似
的内容flash[:success] = "Profile updated"
然而,我不知道如何给设计错误消息一个键和值对。我查看了devise.en.yml但似乎无法将消息与密钥相关联,即:成功,:错误等。 有人可以帮忙吗?谢谢!
答案 0 :(得分:36)
/app/helpers/devise_helper.rb
module DeviseHelper def devise_error_messages! return '' if resource.errors.empty? messages = resource.errors.full_messages.map { |msg| content_tag(:li, msg) }.join sentence = I18n.t('errors.messages.not_saved', count: resource.errors.count, resource: resource.class.model_name.human.downcase) html = <<-HTML <div class="alert alert-error alert-block"> <button type="button" class="close" data-dismiss="alert">x</button> <h4>#{sentence}</h4> #{messages} </div> HTML html.html_safe end end
答案 1 :(得分:8)
我就是这样做的
<% flash.each do |key, value| %>
<div class="message">
<div class="alert-message <%= key %> fade in">
<a class="close" href="#">×</a>
<center><strong><%= value %></strong></center>
</div>
</div>
<% end %>
答案 2 :(得分:2)
我发现最简单的解决方案是在检查:notice
和:alert
时使用所有Flash消息的公共部分来替换必要的bootstrap类。
所以让/views/shared/_alerts.html.erb
像这样 -
<% flash.each do |message_type, message| %>
<div class="alert alert-<%= flash_class_name(message_type) %> alert-dismissable">
<span><%= message %></span>
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<% end %>
添加一个帮助方法(我已将它添加到应用程序帮助程序中),如下所示 -
def flash_class_name(name)
case name
when "notice" then "success"
when "alert" then "danger"
else name
end
end
在应用程序布局(或应用程序的父布局)中包含_alerts.html.erb
。
那就是它!
答案 3 :(得分:0)
事情是devise_error_messages!
本身用class='alert'
将数据包装到div中,因此表单将有2个具有相同类的嵌套div。按x
按钮将关闭嵌套的div,将空div设置为alert
。为避免这种情况,您可以省略辅助返回值中的div,如下所示:
module DeviseHelper
def devise_error_messages!
return '' if resource.errors.empty?
messages = resource.errors.full_messages.map { |msg| content_tag(:li, msg) }.join
html = <<-HTML
<button type="button" class="close" data-dismiss="alert">x</button>
#{messages}
HTML
html.html_safe
end
end