8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

sessionに保存されたHashを別アクションで利用しようとした際にデータ型の変更によりハマった件[Rails]

Last updated at Posted at 2018-12-07

はじめに

Railsアプリでsessionを利用し、データをビューで表示する際、エラーが発生しました。
そのエラーの原因と解決策をここで共有しておきます。

コードで説明

session_controller.rb
def session_store
  controller_data = Hash.new
  .
  .
  # controller_data = {name: 'takuyanin', email: 'takuyanin@gmail.com'} のようなデータが途中で挿入されたとしておきます。
  .
  session[:view_data] = controller_data
end

キーはシンボル型で代入されましたが、sessionに保存されたHashはストア後に、別のアクションで使用する際、文字列型に変化します
理由は、ブラウザにjsonで保存されるためだそうです。
Session : Symbols hash keys getting converted to literals keys in next request (Rails 4.2.3 · Issue #22796 · rails/rails

ですので、別アクションで利用する際は、先ほどのHashが、次のように変化していることを踏まえて、文字列型で取り出す必要があるみたいです。

session_controller.rb
session[:view_data] = {'name' => 'takuyanin', 'email' => 'takuyanin@gmail.com'}

終わりに

セッションでデータ保持し、別アクションで利用する際には、自動的に型変化が行われていることは、知らないとハマってしまいそうなところですよね。
気をつけたいと思います。

少しでも役にたったよーて方はいいねお願いします(^^)

Rails関連記事

正規表現まとめ(基礎)[Ruby編]
配列で利用できる主なメソッドをまとめてみた[Ruby編]
Mysql2::Error: Duplicate entry for key.. エラーを撃退した話(validationの設定)
Rails5でJqueryを利用しようとして少しハマった件(Uncaught ReferenceError: $ is not defined)
change_columnでの設定はrollbackできない話(This migration uses change_column, which is not automatically reversible.)[Rails: migration]

8
4
0

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
8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?