1
0

More than 1 year has passed since last update.

rails 特殊な変数 flash flash[:notice]

Posted at

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の読み込みなどの設定を効率的に管理できます。
このファイルを編集することで、一度の変更でアプリケーション全体に影響を与えることができます。
1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0