簡體   English   中英

如何添加其他消息到Flash [:notice]

[英]How can I add additional message to flash[:notice]

我正在使用Devise進行身份驗證。
它始終顯示一條簡短消息,提示您“您已登錄”。 登錄交易之后。

我在application_controller.rb有這個

if current_user.point_added_at.nil? || !current_user.point_added_at.today?
    plus_point(current_user, 100)
    flash[:notice] = "10 points added for today's sign-in"
    current_user.touch :point_added_at
    current_user.save
end

今天第一次登錄后,它應該顯示此即顯消息。

但它僅顯示You're signed in.顯消息You're signed in.

首次登錄用戶后,如何顯示兩者(或僅顯示“今天登錄可增加10點”)?

更新:

<% flash.each do |name, msg| %>
  <div class="alert alert-<%= name == :notice ? "success" : "error" %>">
    <a class="close" data-dismiss="alert">&#215;</a>
    <%= content_tag :div, msg.html_safe, :id => "flash_#{name}" if msg.is_a?(String) %>
  </div>
<% end %>

是的,絕對有可能顯示您的自定義消息。

但是,首先請看一下Devise的Sessions#create操作

def create
  self.resource = warden.authenticate!(auth_options)
  set_flash_message(:notice, :signed_in) if is_navigational_format?
  sign_in(resource_name, resource)
  respond_with resource, :location => after_sign_in_path_for(resource)
end

set_flash_message行已使用相同的鍵覆蓋了flash :notice 這就是為什么您的消息無法顯示的原因。

解決的方法有兩種:

  1. 覆蓋此方法。 您可以查看Devise Wiki上有關如何執行此操作的信息。 然后,在您的#create新代碼中,執行以下操作

     unless flash(:notice).present? set_flash_message(:notice, :signed_in) if is_navigational_format? end 

    如果有自定義閃光燈,它將保留在那里。

  2. 顯示多條即時消息。 這樣比較好,但是需要一些工作。 首先,給您的自定義消息另一個不是:notice密鑰,例如:custom ,然后在您的Flash處理幫助器方法中,遍歷每對Flash,將正確的CSS類分配給:custom

實際上,方法2並不難。 最簡單的代碼是這樣的

  <% flash.each do |key, value| %>
    <div class="flash <%= key %>"><%= value %></div>
  <% end %>

暫無
暫無

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

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