Techioz Blog

Ruby on Rails で postgres 列を正しくシリアル化する方法

概要

Ruby on Railsを使用してpostgresデータベース内で、データ型が「string」である列に保存しようとしています。この列に整数を保存したいとします。 「string_value」.to_i 関数を呼び出さずに、列の内容を整数として自動的にフェッチする方法で、保存されたデータをシリアル化する方法はありますか?

解決策

まず、シリアル化された情報を保存すると、データのフィルタリング、並べ替え、リクエストが複雑になる可能性があることに注意する必要があります。

しかし、それがあなたの計画である場合、最良のアイデアは、その列を文字列とは異なるデータ型で保存することです。

次のように実行できます。

class YourModel < ApplicationRecord
  # serialize
  serialize :your_column_name, Hash

  # Optional
  def set_value_as_hash(data_type, value)
    self.your_column_name = { datatype: data_type, value: value }
    save
  end

  # optional
  def get_value_from_hash
    value = self.your_column_name[:value]
    case self.your_column_name[:datatype]
    when 'Integer'
      value.to_i
    when 'String'
      value.to_s
    else
      value
    end
  end
end