У меня есть простая модель, в которой у 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?