:type を :message としてレンダリングする Flash メッセージ ビュー コンポーネント?

概要

私はこの投稿 https://reinteractive.com/articles/how-to-create-flash-messages-in-Rails-7 に従って、tailwind で素敵な Flash メッセージを追加し、View Components を使用するようになりました。 :type を除いてすべてが機能します。

例のように Flash メッセージを追加すると、次のようになります。

def home
  flash[:message] = "Welcome to the home page!"
  flash[:type] = :notice
end

次のように表示されます。

フラッシュメッセージのスクリーンショット

これは、component.html.erb です。

<div class='relative flex px-4 py-3 space-x-2 border <%= color_classes %>' role='alert'>
  <strong class='font-bold'><%= message %></strong>
  <span class='pl-5'>
  <%= heroicon 'x-mark', options: { 'data-action': 'click->flash-message#close', class: 'w-6 h-6 fill-current', role: 'button' } %>
  </span>
</div>

これがレンダリングされるものです:

<div data-controller="flash-message" class="inset-0 p-6 items-start justify-end">
  <div class="flex flex-col items-center justify-center">
    <div class="relative flex px-4 py-3 space-x-2 border bg-gray-100 border-gray-400 text-gray-700" role="alert">
      <strong class="font-bold">Welcome to the home page!</strong>

 <div class="relative flex px-4 py-3 space-x-2 border bg-gray-100 border-gray-400 text-gray-700" role="alert">
  <strong class="font-bold">notice</strong>

投稿に誤りはありますか、それとも過去 2 か月間で何か更新されましたか?

解決策

これは意味がありません:

flash[:message] = "Welcome to the home page!"
flash[:type] = :notice

そのはず:

flash[:notice] = "Welcome to the home page!"

フラッシュを検査すると、何を反復しているのかがわかります。

#<ActionDispatch::Flash::FlashHash:0x00007f9ede9208b8
 @discard=#<Set: {}>,
 @flashes={"notice"=>"Welcome to the home page!"},    # <= this
 @now=nil>
<% flash.each do |type, message| %>
  #               │     └─ "Welcome to the home page!"   
  #               └─ "notice"   
  <%= render FlashMessage::Component.new(type: type, message: message) %>
<% end %>