gpt4 book ai didi

ruby-on-rails - rails : Ensure only one boolean field is set to true at a time

转载 作者:数据小太阳 更新时间:2023-10-29 06:36:18 24 4
gpt4 key购买 nike

我有一个 Logo 模型,它的字段名称为:字符串,默认为 bool 值。我希望 true 值是唯一的,以便一次只能将数据库中的一项设置为 true。如何在我的 Controller 中设置更新和新操作以将 Logo 的所有其余值设置为 false?

假设我有以下设置在我的数据库中
模特标志
名称:字符串 |默认值: bool 值 |
项目 1 |是的|
项目 2 |假 |
第 3 项 |假 |

如果我将 Item2 默认值更改为 true,我希望它遍历所有 Logo 并将其余 Logo 设置为 false,因此一次只有一个为 true,所以它看起来像这样。

名称:字符串 |默认值: bool 值 |
项目 1 |假 |
项目 2 |是的|
第 3 项 |假 |

提前感谢您的帮助。

最佳答案

这段代码是从以前的答案中偷来的,并稍微简化了:

def falsify_all_others
Item.where('id != ?', self.id).update_all("default = 'false'")
end

您可以在模型的 before_save 回调中使用此方法。

实际上,最好只“伪造”那些值为“真”的记录,如下所示:

Item.where('id != ? and default', self.id).update_all("default = 'false'")

更新:为了保持代码干燥,使用 self.class 而不是 Item:

self.class.where('id != ? and default', self.id).update_all("default = 'false'")

关于ruby-on-rails - rails : Ensure only one boolean field is set to true at a time,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10134898/

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