Rails のリロード後に flash.notice が一時的に表示される

概要

Rails には次のようなコントローラー アクションがあります。

def register
 if logged_in?
   current_user().courses << Course.find(params[:course_id])
   flash.notice = 'Successfully registered!'
   redirect_to '/'
 else
   flash.alert = "You must be logged in"
   redirect_to '/courses'
 end
end

これは /courses ビューで次のように表示されます。

<% if flash[:notice] %>
   <div class="notice"><%= flash[:notice] %></div>
<% end %>

ただし、別のルートに移動して /courses に戻ると、通知が一瞬点滅してから消えます。これは正常な動作ですか?もしそうなら、なぜそれが起こっているのでしょうか?そうでない場合、私の何が間違っているのでしょうか?

解決策

フラッシュを再度表示したくない場合は、代わりに flash.now を使用します。

flash.now[:notice] = 'Successfully registered!'

コントローラー メソッドでセッション検出を直接実行しているため、アクション フィルターを使用することを強くお勧めします。

before_action :logged_in, only: [:register]

# ...

def register
  # ...
end

ここで、logged_in は、ユーザーが登録され、ログインしていることを確認するメソッドである必要があります。詳細については、フィルターを確認してください。