0
0

Railsの`serialize`を使ってオブジェクトを簡単に保存・読み込みする方法

Posted at

はじめに

Railsで開発を行う際、モデルの属性としてハッシュや配列などの複雑なデータを扱いたい場面があります。そのような場合、Railsのserializeメソッドを使うことで、手軽にオブジェクトをデータベースに保存し、また読み込むことが可能です。この記事では、serializeの基本的な使い方と注意点について解説します。

serializeの基本的な使い方

serializeは、モデルの属性をオブジェクトとして保存するためのメソッドです。通常、データベースのカラムは文字列や整数などの単純なデータ型を想定していますが、serializeを使用すると、これを簡単に回避できます。

例えば、preferencesという配列をUserモデルの属性として保存する場合、以下のように定義します。

class User < ApplicationRecord
  serialize :preferences, Array
end

この場合、preferencesはデータベース上ではテキストとして保存されますが、Railsは自動的にシリアライズ(オブジェクトを文字列に変換)とデシリアライズ(文字列をオブジェクトに変換)を行ってくれます。

# 配列を保存
user = User.new(preferences: ['dark mode', 'email notifications'])
user.save

# 配列を読み込み
user = User.find(1)
user.preferences
# => ['dark mode', 'email notifications']

serializeを使う上での注意点

  • パフォーマンスの問題: serializeされたデータは一つのテキストとして保存されるため、データベースレベルでのクエリが難しくなります。例えば、preferencesの中の特定の要素を条件に検索することはできません。そのため、クエリ性能が重要な場合は、serializeを使わずに別のテーブルを作成する方が良い場合もあります。

json形式でのシリアライズ

Rails 5以降では、serializeを使う際にJSON形式でシリアライズすることも推奨されています。これにより、将来的にデータベースの移行や他のシステムとの互換性が向上します。

class User < ApplicationRecord
  serialize :preferences, JSON
end

おわりに

Railsのserializeを使うことで、モデルの属性に柔軟なデータ型を扱えるようになります。ただし、パフォーマンスやデータの扱いには注意が必要です。

0
0
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
0
0