やったこと
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]:
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]:
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