9

我正在使用 Twitter 的引导警报消息。在我的 application.html.erb 我有...

            <% flash.each do |key, value| %>
                <div class="alert alert-<%=key%>">
                    <a class="close" data-dismiss="alert">×</a>
                    <%= value %>
                </div>
           <% end %>

通常,当我想做一条闪存消息时,我会写类似

flash[:success] = "Profile updated"

但是我不确定如何为设计错误消息提供键值对。我查看了 devise.en.yml 但似乎无法将消息与密钥相关联,即:成功,:错误等。有人可以帮忙吗?谢谢!

4

4 回答 4

37

对于遇到此问题但不知道如何使用引导程序覆盖设计错误消息的任何人。

  1. 创建文件名为:

/app/helpers/devise_helper.rb

  1. 添加以下代码:
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
于 2013-03-14T06:40:00.397 回答
8

我就是这样做的

<% flash.each do |key, value| %>
<div class="message">
   <div class="alert-message <%= key %> fade in">
    <a class="close" href="#">&times</a>
    <center><strong><%= value %></strong></center>
  </div>
</div>
<% end %>
于 2012-04-20T10:30:57.257 回答
2

我发现的最简单的解决方案是对所有闪存消息使用通用部分,同时检查:notice:alert替换为必要的引导类。

所以/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">&times;</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在应用程序布局(或应用程序的父布局)中。

就是这样!

于 2017-07-16T07:06:24.403 回答
0

事情是它devise_error_messages!本身将数据包装到 div 中class='alert',因此表单将有 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
于 2015-08-25T16:41:41.400 回答