我有一个 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
为空。
我错过了什么?
我从你的问题中可以看出,你正在运行一个 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] %>