我正在使用Devise for my Rails 3 app。
如何成功关闭Devise的警报消息以进行登录/关闭?
答案 0 :(得分:14)
你可以:
转到config \ locales \ devise.en.yml并更改要清空字符串的行(删除它们将不起作用)。所以,像这样:
sessions:
signed_in: ''
signed_out: ''
或者扩展/覆盖设计的会话控制器。为此,请复制here中的create
和destroy
操作代码,并将其粘贴到从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值,留下一个没有空白消息的干净数组。