在Devise Rails中关闭警报消息

时间:2012-03-24 20:49:59

标签: ruby-on-rails devise alert

我正在使用Devise for my Rails 3 app。

如何成功关闭Devise的警报消息以进行登录/关闭?

2 个答案:

答案 0 :(得分:14)

你可以:

  1. 转到config \ locales \ devise.en.yml并更改要清空字符串的行(删除它们将不起作用)。所以,像这样:

    sessions:
      signed_in: ''
      signed_out: ''
    
  2. 或者扩展/覆盖设计的会话控制器。为此,请复制here中的createdestroy操作代码,并将其粘贴到从devise的会话控制器继承的控制器(让我们称之为会话),如下所示:

    class SessionsController < Devise::SessionsController
    

    然后删除对set_flash_message的调用。最后,编辑您的路线文件,以使此更改生效:

    devise_for :users, :controllers => { :sessions => 'sessions' }
    

答案 1 :(得分:0)

在其他人所说的基础上,这种方式可能比扩展设计或类似的东西容易一些。

确保使用空字符串而不是删除整行,否则设计将返回使用该消息的默认值。

# blank out any string you don't want to render as a message
devise:
  failure:
    already_authenticated: ''
    unauthenticated: ''
    unconfirmed: ''
   ...

现在设计仍会将空字符串作为闪光警报传递。但现在它看起来像这样,消息是一个空字符串

#<ActionDispatch::Flash::FlashHash:0xa7647c4
  @closed=false,
  @flashes={:alert=>""},
  @now=nil,
  @used=#<Set: {:alert}>>

我在ApplicationHelper文件中使用一个帮助器方法来处理收集所有消息。你可以这样做,但这会给你一个想法。

def all_messages

  # Standard flash messages
  messages = flash.map{|key,val| {:type=>key, :message=>val} unless val.blank? }.compact
    #                                                        |-------------------------|
    # This is where the magic happens. This is how I ignore any blank messages

  # Model validation errors
  model = instance_variable_get("@#{controller_name.singularize}")
  unless model.nil?
    messages += model.errors.full_messages.map do |msg|
      {:type=>:error, :message=>msg}
    end
  end

  return messages

end

瞧,unless val.blank?语句将任何空值映射到nil,.compact方法将删除任何nil值,留下一个没有空白消息的干净数组。