はじめに
Railsアプリでsessionを利用し、データをビューで表示する際、エラーが発生しました。
そのエラーの原因と解決策をここで共有しておきます。
コードで説明
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[: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]