Ruby on rails Rails ActiveRecord验证:字符串的最大长度?

Ruby on rails Rails ActiveRecord验证:字符串的最大长度?,ruby-on-rails,validation,activerecord,Ruby On Rails,Validation,Activerecord,我的数据库迁移文件中有以下字符串/文本字段: t.string :author t.string :title t.string :summary t.text :content t.string :link 以下是我的问题: 每个string/text属性都应该有一个最大长度验证,用于安全性(如果您不想接收几MB的文本输入)和数据库(如果string=varchar,mysql有255个字符的限制)。这是对的还是有任何理由不为数据库中的所有字符串/文本属性进行最大长度验证

我的数据库迁移文件中有以下字符串/文本字段:

  t.string :author
  t.string :title
  t.string :summary
  t.text :content
  t.string :link
以下是我的问题:

  • 每个string/text属性都应该有一个最大长度验证,用于安全性(如果您不想接收几MB的文本输入)和数据库(如果string=varchar,mysql有255个字符的限制)。这是对的还是有任何理由不为数据库中的所有字符串/文本属性进行最大长度验证
  • 如果我不关心作者和标题的确切长度,因为它们不太长,不能存储为字符串,那么我是否应该将它们的最大长度设置为255
  • 如果URL的最大可能长度约为2000个字符,那么将链接存储为字符串而不是文本是否安全?如果我已经在使用regexp验证link属性的格式,那么我是否应该验证link属性的最大长度
  • 内容(文本)属性是否应该具有最大长度以保护数据库不受无限长度输入的影响?例如,将文本字段的最大长度设置为100000个字符是否合理,还是完全没有意义且效率低下

  • 我明白,这些问题对某些人来说可能并不重要,但仍然是——这是对输入的验证,对于任何应用程序来说都是必需的——我认为在这里有点偏执是值得的。

    这个问题很好,也许对rails/mysql内部结构有更多了解的人能够进行更多的扩展

    1) 在模型中进行任何验证都取决于在超出限制的情况下失败发生的位置。模型是最佳选项,因为它很可能会覆盖使用模型的大多数对象。 另一种选择是使用maxlength属性简单地限制表单字段

    第一个选项不适用于可选字段

    2) 我不知道有什么经验法则。用你知道的最长的,把它弄大一点

    3) 我的规则是,任何超过255的都是文本。你可以找到更多关于这个的信息

    4) 如果该列包含相同的内容,那么其中可能有价值。根据内容类型或用户,某些用例可能具有不同的maxlength

    以上所有内容还受到项目中严格的数据验证要求的影响