Rails / Bootstrap - Flash通知:成功现在是红色而不是绿色?

时间:2015-08-06 11:34:44

标签: ruby-on-rails ruby ruby-on-rails-3 twitter-bootstrap flash

我一直试图在这里寻找答案,但我无法找到有效的方法。我已经实现了:成功和:我的rails应用程序的危险闪光通知。它完全正常工作,即:成功是绿色的:危险是红色的,有一个关闭按钮和所有,但是因为添加一些邮件文件我的:成功现在显示红色?

application.html.erb摘录:

<body>

  <div class="container">
    <% flash.each do |key, value| %>
      <%= content_tag :div, class: "alert alert-#{key == 'notice ? 'success' : 'danger'}" do %>
        <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>
        <%= value %>
      <% end %>
    <% end %>

    <%= yield %>
  </div>

</body>

contact_mailer.rb

class ContactMailer < ActionMailer::Base
  default to: 'justindavidson23@gmail.com'

  def contact_email(name, phone, email, event_type, body)
    @name = name
    @phone = phone
    @email = email
    @event = event_type
    @body = body

    mail(from: email, subject: 'Contact Form Message').deliver
  end
end

contacts_controller.rb

class ContactsController < ApplicationController
  def new
    @contact = Contact.new
  end

  def create
    @contact = Contact.new(contact_params)
    if @contact.save
      name = params[:contact][:name]
      phone = params[:contact][:phone]
      email = params[:contact][:email]
      event = params[:contact][:event_type]
      body = params[:contact][:comments]

      ContactMailer.contact_email(name, phone, email, event, body).deliver
      flash[:success] = 'Message Sent.'
      redirect_to new_contact_path
    else
      flash[:danger] = 'Error occurred, messgage not sent.'
      redirect_to new_contact_path
    end
  end
end

private
def contact_params
  params.require(:contact).permit(:name, :phone, :email, :event_type, :comments)
end

和contact_email.html.erb

<!DOCTYPE html>
<html>
  <head>
    <title></title>
  </head>
  <body>
    <p>New Message from Hoot and Holla's Contact form, from <%= "#{@name}, #{@email}" %></p>
    <p><%= @phone %></p>
    <p><%= @event %></p>
    <p><%= @body %></p>
  </body>
</html>

我再说一遍,在邮件进入之前,这一切都完全正常......但现在我感到困惑。请帮忙!

4 个答案:

答案 0 :(得分:8)

有时您希望使用的时间超过successinfo,例如Bootstrap alerts dangerwarning<% flash.each do |key, value| %> <div class="alert alert-<%= key %> alert-dismissible" role="alert"> <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button> <%= value %> </div> <% end %>

以下是我建议的解决方案:

flash[:success] = 'foo'

这样,当您致电key时,您的success将为info,同样适用于warningdangernotice: 'hello world',,这样你就可以利用所有不同的Bootstrap alerts

使用此方法,您将不得不再添加2个CSS类,这些类扩展Bootstrap类, if ,您希望在您的语法中使用语法alert: 'oops'redirect_to root_url, notice: 'welcome home'重定向,例如.alert-alert { @extend .alert-danger; } .alert-notice { @extend .alert-warning; }

如果你想使用这些,那么你可以使用Sass,如下所示。

{{1}}

由于我之前关于邮件回调的评论更像是一个旁注而与此问题无关,因此我为你做了simple gist

答案 1 :(得分:1)

在你的flash循环中,你只是在那里检查flash [:notice]。如果有闪光[:notice],则应用alert-success。除非它适用alert-danger。那么,我在这里改变了什么。我正在alert-successflash[:success]使用flash[:notice] <%= content_tag :div, class: "alert alert-#{['success','notice'].include?(key) ? 'success' : 'danger'}" do %> 。所以, 在_flash.html.erb中执行 -

NSURLSession

答案 2 :(得分:0)

在应用程序布局中尝试此代码...

<div id="wrapper">
<div id="page-wrapper">
<div class="row">
<div class="col-lg-12">
<% flash.each do |name, msg| %>
 <%= content_tag(:div, msg, :id=>"#{name}", :class `enter code here`=>"alert alert-  info") %>
<%end%>
</div>
</div>
</div>
</div>

<script type="text/javascript">
window.setTimeout(function() 
{
$("#notice").fadeTo(500, 0).slideUp(500, function()
{
$(this).remove();
});
}, 5000);
</script>
<%= yield%>

答案 3 :(得分:0)

非常感谢@AmitSuroliya !!这完美地运作了!!我试图弄清楚代码中实际发生的事情......我不认为你可以简单解释一下为什么这个有用吗?? ...如果不是谢谢你呢! !我非常感激:)

贾斯汀

对于遇到相同问题并阅读此内容的人来说PS ....该解决方案是将其复制并粘贴到我的application.html.erb文件中并替换content_tag行我没有...没有创建一个名为_flash.html的部分.erb ..只是有人在那里感到困惑:)