2

文字列フィールド (VARCHAR(255)) に 5kb のテキストを入力したところ、次のエラーが発生しました。

Mysql2::Error: Data too long for column 'title' at row 1: INSERT INTO `posts`....

この問題を解決する最善の方法は何ですか?
モデルの before_save でこのテキストを 255 にカットする必要がありますか?
または、コントローラーの params[:that_field] を修正しますか?
他の解決策はありますか?

4

1 に答える 1

13

解決策は、何を達成したいかによって異なります。それはすべてユーザーエクスペリエンスに関するものです。

ユーザーがこのフィールドに 255 文字を超えるデータを入力できるようにする場合は、フィールドを から:stringに変更します:text

データを 255 より長くしたくない場合は、2 つのオプションがあります。ユーザーに検証メッセージを提供できるようにする場合は、モデルに検証を追加しますPost

class Model < ...
  validates_length_of :title, :maximum => 255
end

3 番目のオプションです。メッセージを気にしない場合は:before_save、データベースに書き込む前にコールバック (たとえば a ) を使用して値をトリミングします。設定直後に文字列を切り捨てたい場合は、属性のデフォルトのセッターをオーバーライドすることもできます。

于 2012-06-30T18:42:47.587 に答える