プログラミングマガジン

プログラミングを中心に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. 2021 02.06

    【Rails】「devise_for」と「devise_scope」について

  2. 2020 12.19

    【Ruby on Rails】「外部キー」の設定のされ方

  3. 2019 12.02

    【Ruby on Rails】ログ出力の記述法や様々な設定方法、設計方針

  4. 2019 12.01

    【Ruby on Rails】URLの指定方法について(URLヘルパーメソッド等)

  5. 2019 12.07

    【Ruby on Rails】「Active Job」でジョブを非同期実行する。(Sidekiq)

  6. 2019 12.07

    【Ruby on Rails】「ページング」の実装(kaminari)

  • コメント ( 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 ©  プログラミングマガジン | プライバシーポリシー