服务器渲染页面中缺少 Flash 消息

问题描述 投票:0回答:1

我有一个 Rails 6 应用程序(不久前从 Rails 5 迁移),它管理项目和这些项目的概述。当您更新项目时,您将被重定向到其概述。

因此在我的项目控制器中:

def update
  respond_to do |format|
    if @item.update(item_params)
      format.html { redirect_to overview_path, notice: "Item updated." }
    else
      format.html { redirect_to overview_path, alert: "An error happend." }
    end
  end
end

我需要提供一个简单的 API,以便在微型服务器上实现此功能,该服务器无法管理太多内容,只能显示内容,因此不需要 JSON 或其他内容。它必须是纯 HTML。

它工作完美,但有一个关键问题:生成的 HTML 不包含 Flash 消息。不过我在 config/application.rb 中有

config.middleware.use ActionDispatch::Flash

在概览控制器中

puts flash.inspect
为空。

我错过了什么?

ruby-on-rails api ruby-on-rails-6 flash-message
1个回答
0
投票

我从你的问题中可以看出,你正在运行一个 Rails API 服务器,并且你的控制器是一个

ActionController::API
。假设这是正确的,那么您需要一些东西才能使闪存正常工作。

Flash 消息存储在会话 cookie 中,如果您没有配置,则没有机制可以通过重定向传输它们:

# config/application.rb

config.middleware.use ActionDispatch::Cookies
config.middleware.use ActionDispatch::Session::CookieStore
config.middleware.use ActionDispatch::Flash

并且您必须包含闪存模块才能拥有

flash
助手并能够通过
redirect_to
助手设置闪光灯:

class Api::V1::MyController < ActionController::API
  include ActionController::Flash

  #...
end

如果您好奇的话,您还可以检查您的会话以查看存储的 Flash 消息:

<%= session[:flash] %>
© www.soinside.com 2019 - 2024. All rights reserved.