web-dev-qa-db-ja.com

リダイレクト時にRails flash通知を表示するには?

Railsコントローラに次のコードがあります:

flash.now[:notice] = 'Successfully checked in'
redirect_to check_in_path

次に/ check_inビューで:

<p id="notice"><%= notice %></p>

ただし、通知は表示されません。コントローラーにリダイレクトしなければ完璧です:

flash.now[:notice] = 'Successfully checked in'
render action: 'check_in'

ただし、リダイレクトが必要です...そのアクションのレンダリングだけではありません。リダイレクト後にフラッシュ通知を受け取ることはできますか?

56
at.

「.now」を削除します。だから書くだけ:

flash[:notice] = 'Successfully checked in'
redirect_to check_in_path

.nowは、リダイレクトではなくレンダリングだけを行う場合に特に使用されることになっています。リダイレクトする場合、.nowは使用されません。

107
Rebitzele
redirect_to new_user_session_path, alert: "Invalid email or password"

代わりに :alertを使用できます:notice

表示する

34
Tauqeer Ahmad

または、1行で実行できます。

redirect_to check_in_path, flash: {notice: "Successfully checked in"}
16
etlds

Bootstrapを使用している場合、リダイレクトのターゲットであるページに適切にフォーマットされたフラッシュメッセージが表示されます。

コントローラーで:

if my_success_condition
  flash[:success] = 'It worked!'
else
  flash[:warning] = 'Something went wrong.'
end
redirect_to myroute_path

あなたの見解では:

<% flash.each do |key, value| %>
  <div class="alert alert-<%= key %>"><%= value %></div>
<% end %>

これにより、次のようなHTMLが生成されます。

<div class="alert alert-success">It worked!</div>

利用可能なBootstrap=アラートスタイルについては、以下を参照してください: http://getbootstrap.com/docs/4.0/components/alerts/

参照: https://agilewarrior.wordpress.com/2014/04/26/how-to-add-a-flash-message-to-your-Rails-page/

5
Jon Schneider

これも機能します

redirect_to check_in_path, notice: 'Successfully checked in'

5
Seifer

/ check_inビューに含めるのを忘れていたため、同じ問題が発生し、あなたの質問は私のものを解決しました。

<p id="notice"><%= notice %></p>

コントローラーでは、1行だけです:

redirect_to check_in_path, :notice => "Successfully checked in"             
2
Florencio Lugo