Railsではフラッシュを表示するために、特殊な変数flashが用意されています。アクションで変数flash[:notice]に文字列を代入すると、flash[:notice]をビューで使うことができます。変数flashは1度表示された後に自動で削除されるようになっています。flashはいろいろな箇所で共通で使っていくのでapplication.html.erbで表示しましょう。
# application.html.erb
<% if flash[:notice] %>
<div class="flash">
<%= flash[:notice] %>
</div>
<% end %>
<% if flash[:notice] %>:
これは、Rubyの制御構造を使用しています。条件分岐を行っています。
もしflash[:notice]という変数(またはキー)が存在する場合、条件が成立します。
これはHTML内のコメントです。コードの意図や説明を文書化するためのものです。
div要素を使用して、コンテンツをグループ化しています。
class="flash"は、CSSスタイルを適用するためのクラス属性です。
<%= flash[:notice] %>:
<%= と %> で囲まれた部分は、Rubyコードを評価し、結果をその場所に挿入します。
ここでは、flash[:notice]の値を表示しています。これは通常、ユーザーに表示するメッセージを格納するために使用される変数です。
<% end %>:
条件分岐の終了を示します。if文の終了を示しています。
このコードの目的は、ウェブページ内に「通知」メッセージを表示することです。例えば、ユーザーがフォームを送信した後に成功メッセージやエラーメッセージを表示する場合に使用されます。もしflash[:notice]が存在する(メッセージが設定されている)場合、そのメッセージを囲む
# posts_controller.rb
def update
# URLパラメータから受け取った投稿IDを使って、対応する投稿をデータベースから取得
@post = Post.find_by(id: params[:id])
# フォームから送信されたコンテンツを、取得した投稿の内容に設定
@post.content = params[:content]
# 投稿を保存しようと試みる
if @post.save
# 保存に成功した場合、成功メッセージを設定し、一覧ページにリダイレクト
flash[:notice] = "投稿を編集しました"
redirect_to("/posts/index")
else
# 保存に失敗した場合、編集画面を再表示(エラーメッセージも表示)
render("posts/edit")
end
end
if @post.save:
@post インスタンス変数に格納された投稿をデータベースに保存しようと試みます。
flash[:notice] = "投稿を編集しました":
保存に成功した場合、成功メッセージを flash ハッシュに設定します。このメッセージは、ユーザーに表示されます。
redirect_to("/posts/index"):
保存に成功したら、投稿一覧ページにリダイレクトします。
else:
保存に失敗した場合の処理を示します。
render("posts/edit"):
保存に失敗した場合、編集画面を再表示します。
エラーメッセージも表示される場合があります。
application.html.erbとは
application.html.erb は、Ruby on Railsフレームワークにおけるビューレイアウト(View Layout)の一部です。ビューレイアウトは、ウェブアプリケーション内の複数のページで共通するコンテンツや構造を定義するためのテンプレートです。application.html.erb ファイルは、Railsアプリケーション全体で使用されるデフォルトのビューレイアウトを定義するために使用されます。
<!DOCTYPE html>
<html>
<head>
<title>My Rails App</title>
<%= csrf_meta_tags %>
<%= csp_meta_tag %>
<!-- 他のメタ情報やCSS/JavaScriptの読み込みなど -->
</head>
<body>
<header>
<!-- ヘッダーコンテンツ -->
</header>
<main>
<%= yield %>
<!-- ページ固有のコンテンツが表示される場所 -->
</main>
<footer>
<!-- フッターコンテンツ -->
</footer>
</body>
</html>
<!DOCTYPE html> から始まる部分は、HTMLドキュメントの基本的な構造を示しています。
<head> セクション内では、ページのタイトルやメタ情報、CSS/JavaScriptの読み込みなどが行われます。
<%= csrf_meta_tags %> と <%= csp_meta_tag %> は、セキュリティ関連のメタ情報を生成するためのヘルパーメソッドです。
<body> セクション内には、ページの実際のコンテンツが配置されます。
<%= yield %> は、実際のビューページのコンテンツが挿入される場所です。これにより、各ページごとのコンテンツが yield 部分に挿入されます。
<header> と <footer> セクションは、ウェブページのヘッダーやフッターに表示されるコンテンツを定義します。
application.html.erb ファイルを編集することで、全てのビューページで共通するヘッダーやフッター、CSSやJavaScriptの読み込みなどの設定を効率的に管理できます。
このファイルを編集することで、一度の変更でアプリケーション全体に影響を与えることができます。