gpt4 book ai didi

ruby-on-rails - 为什么 Rails 验证未更改的属性?

转载 作者:行者123 更新时间:2023-12-04 20:17:30 26 4
gpt4 key购买 nike

即使 some_field 属性未更改(如果其他字段已更改),似乎 validates_uniqueness_of :some_field 也会在“保存”时运行。这看起来很浪费,因为每个 validates_uniqueness_of 都需要一个数据库调用。我知道我可以将 Proc 传递给 validates_uniqueness_of 以检查 some_field 是否已更改,并且我正在考虑进行所有验证并尽可能执行此操作。我想知道的是:

1) 对性能感兴趣的人通常会这样做吗?

2)为什么不是validates_uniqueness_of的默认行为先检查属性是否改变了?

3) 对未更改的属性运行此类验证是否有充分的理由?

我正在使用 Rails 2.3(目前 - 我们正在升级)。我不知道这与 Rails 3 中的情况相同。

最佳答案

如果有人直接更改了数据库中的值怎么办?

如果其他(非 Rails 应用程序)应用程序也访问数据库怎么办?

在上述所有场景中,您仍然希望您的数据有效,以便您的 rails 应用程序按预期运行。如果数据被篡改(被其他应用程序或直接在数据库中),您的 Rails 应用程序会抛出错误,因为它不期望该数据。

话虽如此,这是默认行为。默认行为通常更具限制性,以保持数据有效性并尽量减少错误、遗漏和偶然失误的范围。如果您担心您的案例中的性能,也许您的对象更新非常频繁,并且您对一个不那么频繁更新的字段进行了冗长的自定义验证,并且您不想每次都运行该验证时间,那么按照您在问题中的描述自定义默认行为是非常有意义的。

关于ruby-on-rails - 为什么 Rails 验证未更改的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10402057/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com