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

krn*_*krn 11 validation activerecord ruby-on-rails

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

  t.string :author
  t.string :title
  t.string :summary
  t.text :content
  t.string :link
Run Code Online (Sandbox Code Playgroud)

这些是我的问题:

  1. 每个字符串/文本属性都应具有最大长度验证,用于两个目的,安全性(如果您不希望接收几MB文本输入)和数据库(如果string = varchar,则mysql限制为255个字符).这是对的还是有任何理由不对数据库中的每个字符串/文本属性进行最大长度验证?
  2. 如果我不关心作者和标题的确切长度,因为它们不会太长而不能存储为字符串,我应该为每个字符串设置最大长度为255吗?
  3. 如果URL的最大可能长度大约为2000个字符,将链接存储为字符串是否安全,而不是文本?如果我已经使用regexp验证其格式,我是否应该验证链接属性的最大长度?
  4. 内容(文本)属性是否应该具有最大长度,以保护数据库免受无限长度的输入?例如,将文本字段的最大长度设置为100,000个字符是否合理,或者这是完全没有意义且效率低下的?

我理解,这些问题对某些人来说似乎并不重要,但仍然 - 这是对输入的验证,这是任何应用程序都需要的 - 而且我认为在这里相当偏执是值得的.

mbd*_*dev 5

问题很好,也许对rails/mysql内部有更多了解的人将能够扩展更多.

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

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

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

3)我的规则是255以上的任何内容都是文本.你可以在这里找到更多信息

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

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