如何保持相关模型中主要属性的一致性

时间:2019-04-03 10:59:15

标签: ruby-on-rails

我有一个简单的模型,其中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回调中处理此类内容?

0 个答案:

没有答案