Как сохранить согласованность основного атрибута в связанной модели - PullRequest
0 голосов
/ 03 апреля 2019

У меня есть простая модель, в которой у User есть много Email, чтобы пользователь мог выбрать свой основной адрес электронной почты, я добавил основной атрибут для модели Email, которая является логическим значением.

Вы можете поспорить, хотите ли вы иметь это как атрибут связанной модели, но я думаю, что это немного облегчает поддержку. Например: мне все равно, действительно ли кто-то устанавливает первичную электронную почту.

Я хотел бы убедиться, что есть только один адрес электронной почты, помеченный как основной одновременно.

Для этого я написал простой метод экземпляра 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...