显示控制器关注的闪光警报

Display flash alert from controller's concern

我有一个控制器问题,它重新组合了访问控制的逻辑:

module AccessControl
  extend ActiveSupport::Concern

  def restrict
    unless current_user
      flash.now[:danger] = 'You must log in first'
      redirect_to :root
    end
  end
end

包含在某些控制器中并用作 before_action 过滤器

class SomeController < ApplicationController
  include AccessControl

  before_action :restrict
end

但不知何故,闪现消息没有显示(如果从控制器调用其他闪现消息,它们会正确显示)。

知道为什么我不能从问题中调用即时消息吗?如果不是 expected/recommended 实现,我怎么可能拥有 DRY 控制器但仍然显示闪现消息?

尚未在ActiveSupport::Concern's nor ActiveDispach::Flash的文档中找到答案。我正在尝试一些替代方案,但其中 none 确实有效。

只需测试您的代码,它就可以工作。

根据您的代码,闪现消息仅在用户未登录时显示,因此请确保在测试时退出。

AJP 的 answer 解决了我的问题。

TLDR:将 flash[:danger]redirect_to

结合使用