簡體   English   中英

在Devise Rails中關閉警報消息

[英]Turn off alert message in Devise Rails

我正在使用Devise for my Rails 3應用程序。

如何成功關閉Devise的警報消息以進行登錄/注銷?

你可以:

  1. 轉到config \\ locales \\ devise.en.yml並更改要清空字符串的行(刪除它們將不起作用)。 所以,像這樣:

     sessions: signed_in: '' signed_out: '' 
  2. 或者擴展/覆蓋設備的會話控制器。 為此,請從此處復制createdestroy動作代碼,並將其粘貼到從devise的會話控制器繼承的控制器(讓我們稱之為會話)中,如下所示:

     class SessionsController < Devise::SessionsController 

    然后刪除對set_flash_message的調用。 最后,編輯您的路線文件,以使此更改生效:

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

在其他人所說的基礎上,這種方式可能比擴展設計或類似的東西容易一些。

確保使用空字符串而不是刪除整行,否則設計將返回使用該消息的默認值。

# 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值,留下一個沒有空白消息的干凈數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM