Rails:列的数据太长

时间:2012-06-30 18:36:18

标签: ruby-on-rails ruby activerecord

我在字符串字段(VARCHAR(255))中输入了5kb文本并收到此错误:

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

解决此问题的最佳方法是什么? 我应该在模型中的before_save中将此文本剪切为255吗? 或者在控制器中修复params [:that_field]? 还有其他解决方案吗?

1 个答案:

答案 0 :(得分:12)

解决方案取决于您想要实现的目标。这完全取决于用户体验。

如果您希望用户能够为此字段输入超过255个字符的数据,请将字段从:string更改为:text

如果您不希望数据长于255,那么您有两个选择。如果您希望能够向用户提供验证消息,请向Post模型添加validation

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

第三个选项,如果您不介意该消息,请在将值写入数据库之前使用回调(例如:before_save)修剪该值。如果您希望在设置后立即截断字符串,也可以覆盖属性的默认设置器。