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