【问题标题】:Rails ActiveRecord validation: maximum length of a string?Rails ActiveRecord 验证:字符串的最大长度?
【发布时间】:2012-06-14 21:08:39
【问题描述】:

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

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

这些是我的问题:

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

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

【问题讨论】:

    标签: ruby-on-rails validation activerecord


    【解决方案1】:

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

    1) 在模型中进行任何验证取决于您希望失败发生在哪里,以防它超过限制。该模型是最佳选择,因为它很可能会覆盖使用该模型的大多数对象。 其他替代方法是简单地使用 maxlength 属性限制表单字段。

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

    2) 我不知道任何经验法则。使用你知道最长的任何东西,然后让它变大一点。

    3) 我的规则是任何高于 255 的内容都是文本。你可以在这个Here找到更多信息

    4) 如果该列包含相同的内容 - 这可能是有价值的。根据内容类型或用户,某些用例可能具有不同的最大长度。

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

    【讨论】:

      猜你喜欢
      • 2011-05-25
      • 2019-04-25
      • 1970-01-01
      • 2013-12-18
      • 1970-01-01
      • 2011-07-21
      • 1970-01-01
      • 2018-03-07
      相关资源
      最近更新 更多