我有一个简单的模型,其中User
有很多Email
,为了让用户选择他们的主要电子邮件,我在Email
模型中添加了primary属性,这是一个布尔值。
您可以争论是否要将其作为相关模型的属性,但是我认为这使其维护起来更容易一些。例如:我不太在乎是否有人设置了主要电子邮件。
我想确保的是,同时只有一个电子邮件地址标记为主要电子邮件地址。
为此,我编写了一个简单的实例方法toggle_primary
,如下所示:
class Email < ApplicationRecord
belongs_to :user
def toggle_primary
self.user.emails.update_all(primary: false)
self.update(primary: true)
end
end
某种程度上,我认为这并不是最佳实践。有什么改善的技巧吗?最好将其包装在事务中,还是在before_save / before_validation回调中处理此类内容?