0

我正在使用设计进行身份验证。
它总是显示一条闪现消息,上面写着“您已登录”。登录交易后。

我有这个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.

如何在用户首次登录后同时显示两者(或仅“为今天的登录增加 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 %>
4

1 回答 1

1

是的,绝对可以显示您的自定义消息。

但是,首先看看 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 %>
于 2013-07-24T17:00:32.353 回答