ruby-on-rails - Rails ActiveRecord 验证 : maximum length of a string?

标签 ruby-on-rails validation activerecord

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

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

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

  • 我理解,这些问题对某些人来说可能看起来不重要,但仍然 - 这是对输入的验证,这是任何应用程序所必需的, - 我认为在这里相当偏执是值得的。

    最佳答案

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

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

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

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

    3)我的规则是任何高于 255 的都是文本。您可以在此找到更多信息 Here

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

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

    关于ruby-on-rails - Rails ActiveRecord 验证 : maximum length of a string?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10988963/

    相关文章:

    php - 如何从 Respect\Validation 获取验证错误消息?

    ruby-on-rails - 在 ActiveRecord 中按 created_at 对记录进行分组

    ruby-on-rails - 如何在 ActiveRecord 中设置 has_one 默认值?

    ruby-on-rails - 为相关数据库创建Rails下拉列表

    ruby-on-rails - 将渲染的 View 作为电子邮件发送

    javascript - 在rails4中调用js内部的配置变量

    c# - 使用 Microsoft EnterpriseLibrary 验证时堆栈溢出

    ruby-on-rails - Rails 外键验证

    ruby-on-rails - 如何让carrierwave在销毁记录时删除文件?

    ruby-on-rails - Rails 5升级打破了延迟任务