6

Я пытался найти ответ здесь, но я не могу найти ничего, что работает. Я реализовал: успех и: уведомление об опасности для моего приложения rails. Он работал полностью нормально, т. Е. Успех был зеленый, и: опасность была красной, с закрытой кнопкой и всем, НО с добавлением некоторых файлов почтовой программы: успех теперь отображается красным?Rails/Bootstrap - Flash-уведомление: успех теперь красный, а не зеленый?

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: '[email protected]' 

    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> 

Я повторяю, что все это работало совершенно нормально, прежде чем материал почтовой почты вошел ... но теперь я просто озадачен. Пожалуйста помоги!

+0

Какой браузер вы используете? – EugZol

+1

Используете ли вы самоцвета самоцвета? И на стороне примечания, вы должны поместить эту почтовую программу в обратный вызов. –

+0

Привет, Джастин, да, и спасибо за подсказку! .., что бы почистить его! – RuNpiXelruN

ответ

6

Иногда вы будете хотеть использовать более notice и success, как Bootstrap alertsinfo, danger , и warning.

Вот решение, я бы рекомендовал:

<% flash.each do |key, value| %> 
    <div class="alert alert-<%= key %> alert-dismissible"> 
    <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, warning, danger и т.д. Таким образом, вы можете использовать все от разных Bootstrap alerts.

С помощью этого метода, вам придется добавить еще 2 классов CSS, которые расширяют классы Bootstrap, если вы хотите использовать синтаксис notice: 'hello world', или alert: 'oops' в ваших переадресациях, как redirect_to root_url, notice: 'welcome home'.

Если вы действительно хотите использовать их, вы можете использовать Sass, как показано ниже.

.alert-alert { 
    @extend .alert-danger; 
} 

.alert-notice { 
    @extend .alert-warning; 
} 

Поскольку мой комментарий ранее на почтовой программы обратного вызова было больше стороне записки и не имеет отношения к этому вопросу, я сделал simple gist для тебя.

+0

О, это здорово @JustinLicata! Очищает его так много! (И упрощает). Спасибо, что нашли время, чтобы сделать это, действительно оцените! – RuNpiXelruN

+0

Добро пожаловать, приветственный помощник! –

1

В вашей петле вспышки вы проверяете только вспышку [: notice]. если есть вспышка [: уведомление], вы применяете alert-success. если оно не применяется alert-danger. Итак, что я меняю здесь. я применяю alert-success для обоих flash[:success] & flash[:notice]. Так, ли в _flash.html.erb -

<%= content_tag :div, class: "alert alert-#{['success','notice'].include?(key) ? 'success' : 'danger'}" do %> 
+0

Ahh имеет прекрасный смысл !! ​​.. thankyou снова !! – RuNpiXelruN

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%> 
+0

Некоторые объяснения будут оценены. – Mark

0

Ах спасибо так много @AmitSuroliya !! Это отлично работает! Я пытаюсь понять, что на самом деле происходит здесь, в коде ... я не думаю, что вы могли бы дать короткое объяснение, почему это работает, если бы вы ... если не поблагодарили! Я ценю это так много :)

Джастину

PS для людей, имеющих ту же самую проблему и читающим это .... это решение было скопировать и вставить это в мой файл application.html.erb и замена content_tag линии я был ... НЕ создавая частичный под названием _flash.html.erb ..Just упаковывают кто-нибудь путаться там :)

+1

Приветствую вас, Юстин ....... в вашем цикле 'flash', вы только проверяете flash [: notice]. если есть вспышка [: уведомление], вы применяете предупреждение-успех. если он не применяет «предупреждающую опасность». Итак, что я меняю здесь. Я применяю 'alert-success' для' 'flash [: success] & flash [: notice]. –

+0

Ahh имеет прекрасный смысл !! ​​.. thankyou снова !! – RuNpiXelruN

Смежные вопросы