Rails serializeを使用してハッシュをデータベースに保存する 質問する

Rails serializeを使用してハッシュをデータベースに保存する 質問する

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 コンソールを使用してこれをテストするには、次のようにします。

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

出力は false です。何が問題なのでしょうか?

ベストアンサー1

列の型が間違っています。文字列ではなくテキストを使用する必要があります。したがって、移行は次のようになります。

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

すると、Rails がそれを適切に YAML に変換します (適切なシリアル化を実行します)。文字列フィールドはサイズが制限されており、非常に小さい値のみを保持します。

おすすめ記事