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 に変換します (適切なシリアル化を実行します)。文字列フィールドはサイズが制限されており、非常に小さい値のみを保持します。