Rails5 の flash を使ってみる (keep、now)
Ruby Ruby on Rails
Published: 2019-07-07

やったこと

Rails の flash について挙動を調べます。

keep、now についても調べます。

確認環境

$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]

$ rails --version
Rails 5.2.3

調査

検証で使ったコード

formからGETメソッドで下記のように遷移します。

/users/new -> /users/new2 -> /users/new3

config/routes.rb

Rails.application.routes.draw do
  get 'users/new'
  get 'users/new2'
  get 'users/new3'
end

app/views/users/new.html.erb

<p><%= flash[:abc] %></p>
<form action="/users/new2">
  <input type="submit">
</form>

app/views/users/new2.html.erb

<%= flash[:abc] %>
<form action="/users/new3">
  <input type="submit">
</form>

app/views/users/new3.html.erb

<%= flash[:abc] %>

通常 (flash)

app/controllers/users_controller.rb

class UsersController < ApplicationController
  def new
    # 通常 (flash)
    flash[:abc] = Time.current
    logger.debug("flash[:abc]: #{flash[:abc]}")
  end

  def new2
    logger.debug("flash[:abc]: #{flash[:abc]}")
  end

  def new3
    logger.debug("flash[:abc]: #{flash[:abc]}")
  end
end

出力結果 (抜粋)

Started GET "/users/new" for ::1 at 2019-07-07 01:23:52 +0900
flash[:abc]: 2019-07-07 01:23:52 +0900

Started GET "/users/new2" for ::1 at 2019-07-07 01:23:53 +0900
flash[:abc]: 2019-07-07T01:23:52.266+09:00

Started GET "/users/new3" for ::1 at 2019-07-07 01:23:55 +0900
flash[:abc]:

rails-flash.png

flash.now

app/controllers/users_controller.rb

class UsersController < ApplicationController
  def new
    # flash.now
    flash.now[:abc] = Time.current
    logger.debug("flash[:abc]: #{flash[:abc]}")
  end

  def new2
    logger.debug("flash[:abc]: #{flash[:abc]}")
  end

  def new3
    logger.debug("flash[:abc]: #{flash[:abc]}")
  end
end

出力結果 (抜粋)

Started GET "/users/new" for ::1 at 2019-07-07 01:15:06 +0900
flash[:abc]: 2019-07-07 01:15:07 +0900

Started GET "/users/new2" for ::1 at 2019-07-07 01:15:13 +0900
flash[:abc]:

Started GET "/users/new3" for ::1 at 2019-07-07 01:15:21 +0900
flash[:abc]:

rails_session_now.png

flash.keep

app/controllers/users_controller.rb

class UsersController < ApplicationController
  def new
    flash[:abc] = Time.current
    logger.debug("flash[:abc]: #{flash[:abc]}")
  end

  def new2
    # flash.keep
    flash.keep(:abc)
    logger.debug("flash[:abc]: #{flash[:abc]}")
  end

  def new3
    logger.debug("flash[:abc]: #{flash[:abc]}")
  end
end

出力結果 (抜粋)

Started GET "/users/new" for ::1 at 2019-07-07 01:26:54 +0900
flash[:abc]: 2019-07-07 01:26:54 +0900

Started GET "/users/new2" for ::1 at 2019-07-07 01:26:56 +0900
flash[:abc]: 2019-07-07T01:26:54.958+09:00

Started GET "/users/new3" for ::1 at 2019-07-07 01:26:57 +0900
flash[:abc]: 2019-07-07T01:26:54.958+09:00

rails-keep.png