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

时间:2012-06-11 23:57:29

标签: ruby-on-rails validation activerecord

我在数据库迁移文件中有这些字符串/文本字段:

  t.string :author
  t.string :title
  t.string :summary
  t.text :content
  t.string :link

这些是我的问题:

  1. 每个字符串/文本属性都应具有最大长度验证,用于两个目的,安全性(如果您不想接收几MB文本输入)和数据库(如果string = varchar,mysql限制为255个字符) 。这是对的,还是有理由不对数据库中的每个字符串/文本属性进行最大长度验证?
  2. 如果我不关心作者和标题的确切长度,因为它们不会太长而不能存储为字符串,我应该为每个字符串设置最大长度为255吗?
  3. 如果URL的最大可能长度大约为2000个字符,将链接存储为字符串是否安全,而不是文本?如果我已经使用regexp验证其格式,我是否应该验证链接属性的最大长度?
  4. 内容(文本)属性是否应该具有最大长度,以保护数据库免受无限长度的输入?例如,将文本字段的最大长度设置为合理的100,000个字符,还是完全无意义且效率低下?
  5. 我理解,这些问题对某些人来说似乎并不重要,但仍然 - 这是对输入的验证,这是任何应用程序都需要的 - 而且我认为在这里相当偏执是值得的。

1 个答案:

答案 0 :(得分:5)

问题很好,也许对rails / mysql内部有更多了解的人可以扩展更多。

1)在模型中进行任何验证取决于您希望在超出限制的情况下发生故障的位置。该模型是最佳选择,因为它最有可能覆盖使用该模型的大多数对象。 其他替代方法是使用maxlength属性简单地限制表单字段。

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

2)我不知道任何经验法则。使用你知道的最长的东西,并使它更大。

3)我的规则是255以上的任何内容都是文本。您可以在Here

上找到更多相关信息

4)如果列中包含相同的内容 - 可能有值。某些用例可能具有不同的maxlength,具体取决于内容类型或用户。

上述所有因素也受到项目中严格的数据验证要求的影响。