Rails 3.1 Devise How To Change Flash Message CSS From notice to success?

跟風遠走 提交于 2019-12-23 09:21:10

问题


Rails 3.1 and Devise 1.5 question.

I'm using the following code to display flash messages in my layout:

    <% flash.each do |key, message| %>
      <%= content_tag(:div, message, :class => "flash #{key}") %>
    <% end %>

I'd like to change the css class for some of my confirmation messages from notice to success, but I don't know where to override or change the key because I don't know where it's set.

Can anybody point me in the right direction?

Thanks!


回答1:


So the way to do this is to edit the devise controllers.

When you install Devise through the normal installation I don't think it install the controllers (at least it didn't for me).

So first you should manually add the controller files and put them into your project in the same location: https://github.com/plataformatec/devise/tree/master/app/controllers/devise

Once you have the files in your project, go to the "sessions_controller.rb" file.

One lines 16 & 25, you should see the code:

set_flash_message :notice, :signed_in

and

set_flash_message :notice, :signed_out

You just need to change ":notice" to ":success"

Hope that works!




回答2:


The css class is being set by the :class argument. To add a class of notice (or success, etc.), just change your call to the following:

<%= content_tag(:div, message, :class => "flash #{key} notice") %>



回答3:


I ran into this problem because I'm using the bootstrap-sass gem which uses a whole different class structure for flash messages. I took the route of solving this with sass rather than messing with devise at all (sass inheritance is awesome:).

So, I render the flash messages in app/view/layouts/application.html.haml:

%div.container
  - flash.each do |key, value|
    = content_tag(:div, value, class: "alert alert-dismisable alert-#{key}")

And, I add a simple rule to app/assets/stylesheets/custom.css.scss to get Devise's flash messages working:

/* Style Devise Flash messages like Bootstrap */
.alert-alert {
  @extend .alert-warning;
}

That's it! now flash[:alert] is styled just like bootstrap's flash[:warning].



来源:https://stackoverflow.com/questions/8387135/rails-3-1-devise-how-to-change-flash-message-css-from-notice-to-success

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!