gpt4 book ai didi

ruby-on-rails - 我可以让 validates_uniqueness_of 在 rails 中默默地失败吗?

转载 作者:数据小太阳 更新时间:2023-10-29 07:52:46 26 4
gpt4 key购买 nike

标题说明了一切......

我想要一个列的唯一约束,但如果尝试使用该约束创建记录,就会失败。

或者...我应该只使用 first_or_initialize/first_or_create 吗?

最佳答案

first_or_create/first_or_initialize 适用于当您愿意返回现有记录/实例而不是创建/实例化新记录/实例时。如果那是你想要的行为,那么也许你应该走那条路。


此答案其余部分的简短版本:“您为什么要编写一个随后会被忽略的约束?这听起来很可疑。”

但是既然你说你希望它失败,请考虑以下几点:

如果要保持沉默,约束的意义何在?那会隐藏一个问题,而您不希望那样。您的应用程序/数据库就像是,“嘿,老兄,您告诉我要始终拒绝这种非独特的废话,但现在您改变了主意?”您使用这些失败使您的数据保持有效并将错误传递回用户,以便他们可以纠正错误。

如果你只需要在某些情况下强制唯一性,但在其他情况下避免它是可以的(这会很奇怪,但我听说过更奇怪的事情)那么你需要认真考虑那段代码的设计。如果您能明确地说,“这应该始终是独一无二的,或者从不关心是独一无二的,那绝对是最好的 - 一个或另一个。” 如果那是你所需要的,那么你必须在数据库级别删除任何唯一性约束(因为你不能有条件地忽略它们)并使其成为 Rails 模型级别的条件约束。但是,如果您走这条路,请非常小心。一旦您的表中有非唯一数据,您将无法在需要时轻松返回,并且您可能会将 future 的自己描绘成无效数据的可怕角落。

如果唯一性约束因非用户提供的数据而失败(即您在应用程序中创建完全独立于任何类型的用户输入的记录)那么您的代码中存在错误 并且应该解决这个问题,因为您应该能够 100% 地防止自己代码中的唯一性约束错误。

如果这是暂时的,也许您正在基于损坏/有错误的第 3 方数据源创建记录,但您现在无法修复它或无法控制它,但您需要你的应用程序继续工作,那么如果你问一个关于你的情况的更具体的问题可能会有所帮助,因为临时解决方法是他们自己的一个类别。有些是经过精心设计的解决方法或补丁,而另一些则往往会变成可怕的黑客攻击,这将花费您的维护时间。

关于ruby-on-rails - 我可以让 validates_uniqueness_of 在 rails 中默默地失败吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23377402/

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