プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • Ruby on Rails
  • 【Ruby on Rails】「serialize」や「store」について
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【Ruby on Rails】「serialize」や「store」について

12.26

  • miyabisan2
  • コメントを書く

この記事は1分で読めます

serializeやstoreとは?

ActiveRecordの機能の一つでtext型のカラムに対して配列やハッシュ等好きなデータ型のデータを放り込むことができる機能です。

メリット

テーブルやカラムを追加しなくても自由にデータを保存することができる便利機能の事です。

serialize

store

serializeのラッパーでモデルに自動的にアクセサ(readerやwriter)を生やしてくれます。

serializeの使い方

マイグレーションファイル側

text型を指定します。今回の場合で言えば「t.text :memo」がそれに当たります。

1
2
3
4
5
6
7
8
9
10
class CreateUsers < ActiveRecord::Migration[6.0]
  def change
    create_table :users do |t|
      t.string :name
      t.text :memo
 
      t.timestamps
    end
  end
end

モデル側

1
2
3
class User < ApplicationRecord
  serialize :memo
end

使ってみる。

カラムに配列を登録することができました。取り出す際も配列として取り出せています。これは普通のtext形では無理です。

1
2
3
4
5
6
7
8
9
10
11
12
13
user = User.new
irb(main):007:0> user.name = [123,245]
=> [123, 245]
irb(main):009:0> user.save!
   (0.1ms)  begin transaction
  User Create (0.9ms)  INSERT INTO "users" ("name", "memo", "created_at", "updated_at") VALUES (?, ?, ?, ?)  [["name", "[123, 245]"], ["memo", "---\n- 123\n- 245\n"], ["created_at", "2020-12-26 07:12:12.364860"], ["updated_at", "2020-12-26 07:12:12.364860"]]
 
irb(main):014:0> User.all.third.memo[0]
  User Load (0.2ms)  SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT ? OFFSET ?  [["LIMIT", 1], ["OFFSET", 2]]
=> 123
irb(main):015:0> User.all.third.memo[1]
  User Load (0.2ms)  SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT ? OFFSET ?  [["LIMIT", 1], ["OFFSET", 2]]
=> 245

上記の例を見ればわかると思いますが、取り出す際に「[123,245]」となっていますがDBには下記のような値が格納されています。これをRailsでは取り出す際に配列に変換しています。

1
---\n- 123\n- 245\n

基本的には使わない。

  • 普通の文字列に比べて検索もしづらい。
  • カラムにインデックスが貼れない。
  • DBの正規化をせずにデータを保持するということになるのでRDBMSのパフォーマンスを活用しきれない。
スポンサーリンク
  • 2020 12.26
  • miyabisan2
  • コメントを書く
  • Ruby on Rails
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2019 11.17

    【Ruby】日付や時刻を扱うクラス

  2. 2019 12.01

    【Rspec】System Spec(システムスペック)の基本

  3. 2019 11.30

    【Ruby on Rails】モデルの状態を自動制御する「コールバック」、「フィルタ(Filter)」について

  4. 2020 09.16

    【Ruby on Rails】ビューヘルパー(エスケープ関連、タグ関連など)

  5. 2018 06.17

    【Ruby on Rails】概要(他言語への影響、環境別構成例、テストフレームワーク)

  6. 2021 01.09

    【Ruby on Rails】「bullet」、「N+1問題」について

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【Ruby on Rails】「ActionView:…

【Ruby on Rails】「チェックボックス」、「…

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー