Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如果我对null false和width进行了验证,是否应该为它们添加数据库约束?_Ruby On Rails_Database_Validation_Constraints - Fatal编程技术网

Ruby on rails 如果我对null false和width进行了验证,是否应该为它们添加数据库约束?

Ruby on rails 如果我对null false和width进行了验证,是否应该为它们添加数据库约束?,ruby-on-rails,database,validation,constraints,Ruby On Rails,Database,Validation,Constraints,如果我已经有了执行相同操作的验证,那么什么时候应该添加数据库约束 我知道,如果某些事情对你的应用至关重要,比如确保用于用户身份验证的电子邮件地址是唯一的,那么你确实需要一个具有唯一约束的数据库索引。我想问的是非关键任务领域 例如,如果我有一个带有标题字段的articles表,那么我在模型中会有一个阻止空白标题提交的约束 # app/models/article.rb validates :title, presence: true 还向数据库添加null false约束是最佳做法吗?如果一个空

如果我已经有了执行相同操作的验证,那么什么时候应该添加数据库约束

我知道,如果某些事情对你的应用至关重要,比如确保用于用户身份验证的电子邮件地址是唯一的,那么你确实需要一个具有唯一约束的数据库索引。我想问的是非关键任务领域

例如,如果我有一个带有标题字段的articles表,那么我在模型中会有一个阻止空白标题提交的约束

# app/models/article.rb
validates :title, presence: true
还向数据库添加null false约束是最佳做法吗?如果一个空白标题以某种方式通过了模型验证,那么它不是一个任务关键型问题

最大长度也是一个类似的问题。我还可以在文章模型中设置最大长度验证,以防止标题超过100个字符

# app/models/article.rb
validates :title, presence: true, length: { maximum: 100 }
默认情况下,Postgres将varchar字段(Rails中的字符串类型)的最大长度设置为255。如果一个过长的标题以某种方式通过了验证,这不是一个任务关键型问题,那么将数据库中的宽度限制设置为100个字符是否有性能优势?或者如果是2个字符的状态代码呢?如果模型验证会阻止在数据库中设置比默认宽度更短的宽度,是否有最佳做法


我在表单字段中添加了一个HTML属性来检查presence和maxlength,因此在同一个输入上可能会有三个检查。

简单的回答是,这取决于不同的意见。我倾向于在数据库中始终具有约束,即使代码验证了约束。因为开发人员、QA等可能会尝试将数据直接注入数据库。有一个约束会强制执行约定。查看此线程以获取更多反馈