Я просто собираюсь ответить с точки зрения User и EmailAddress, если это нормально с вами;)
В вашей пользовательской модели действительно должно быть has_many :email_addresses
, has_one :active_email, :class_name => 'EmailAddress'
и, как вы правильно определили, accepts_nested_attributes_for :email_addresses
Модель EmailAddress должна, конечно, иметь belongs_to :User
.
Помимо этого, я думаю, что вы слишком обдумываете вещи. Затем в форме для создания пользователя разрешите ему вводить столько адресов электронной почты, сколько они захотят, и либо попросите их сначала указать свою «активную» электронную почту, либо используйте переключатель, чтобы указать, какой адрес электронной почты является их основным адресом.
Редактировать: Что касается оператора before_create, я думаю, что это просто должна быть простая проверка того, что основной адрес электронной почты был задан / отмечен (если необходимо, чтобы они указали адрес электронной почты в первую очередь).
Если это не соответствует необходимым функциям, пожалуйста, прокомментируйте. Я постараюсь помочь больше.