作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我有一个 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/
我是一名优秀的程序员,十分优秀!