我正在使用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
今天首次登录后应显示此Flash消息。
但它只显示Flash消息You're signed in.
如何在首次登录用户后显示两者(或仅为今天的登录添加“10分”)?
更新:
<% flash.each do |name, msg| %>
<div class="alert alert-<%= name == :notice ? "success" : "error" %>">
<a class="close" data-dismiss="alert">×</a>
<%= content_tag :div, msg.html_safe, :id => "flash_#{name}" if msg.is_a?(String) %>
</div>
<% end %>
答案 0 :(得分:1)
是的,绝对可以显示您的自定义消息。
但是,首先看看Devise的Sessions #create action
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
。这就是你的信息无法显示的原因。
要解决,有两种方式:
覆盖此方法。您可以查看Devise wiki,了解如何执行此操作。然后,在你的新代码#create中,做一些像这样的事情
unless flash(:notice).present?
set_flash_message(:notice, :signed_in) if is_navigational_format?
end
如果有自定义闪存,则会自动保留。
显示多条Flash消息。这更好,但需要一些工作。首先,为您的自定义消息提供除:notice
以外的其他密钥,比如:custom
,然后,在您的Flash处理辅助方法中,浏览每对闪存,将正确的CSS类分配给:custom
实际上方法2并不难。最简单的代码就像这样
<% flash.each do |key, value| %>
<div class="flash <%= key %>"><%= value %></div>
<% end %>