1. ホーム
  2. ruby-on-rails

[解決済み] Railsのserializeを使ってデータベースにハッシュを保存する

2022-06-05 18:39:47

質問

私のRailsアプリで、IDを試行回数にマッピングしたハッシュを保存しようとしています。この新しい列に対応するために、データベースへの私の移行。

class AddMultiWrongToUser < ActiveRecord::Migration
  def self.up
    add_column :users, :multi_wrong, :string
  end

  def self.down
    remove_column :users, :multi_wrong
  end
end

私のモデルには

class User < ActiveRecord::Base 
 serialize :multi_wrong, Hash
end

しかし、これをrails consoleで実行してテストすると。

user = User.create()
user.multi_wrong = {"test"=>"123"}
user.save

出力はfalseです。何が間違っているのでしょうか?

どのように解決するのですか?

列の型が正しくありません。String の代わりに Text を使用する必要があります。したがって、あなたの移行は、次のようになります。

 def self.up
   add_column :users, :multi_wrong, :text
 end

すると、Railsはそれを適切にYAMLに変換してくれます(そして適切なシリアライズを行います)。文字列フィールドはサイズに制限があり、特に小さな値しか保持できません。