Rails: соедините 2 модели с 1 формой с помощью Devise

#ruby-on-rails #ruby #ruby-on-rails-4 #devise

#ruby-on-rails #ruby #ruby-on-rails-4 #разработка

Вопрос:

В последнее время много экспериментировал с Rails, и в настоящее время я работаю над проектом. Чего я хочу добиться, так это иметь одну форму входа для 2 наборов таблиц в одной БД.

Одна называется user, а другая — member . Я на пути к тому, чтобы сделать так, чтобы, если вы зарегистрируете свою электронную почту в одном из них, вы не могли зарегистрироваться в другом. Чтобы избежать этой ошибки дублирования, если вы зарегистрируетесь для обоих. Однако я не могу понять, как создать form_for, который проверяет, присутствуют ли данные для входа в систему у пользователя или участника, а затем регистрирует их соответственно.

 <%= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %>
  

Не уверен, как настроить этот баггер.

Комментарии:

1.Просто хочу получить некоторые разъяснения. Вы хотите, чтобы один человек регистрировался либо как a, user либо как a member , но не оба? Или вы хотите, чтобы один человек мог зарегистрироваться как a user и как a member , но вы просто не хотите дважды сохранять их электронную почту в базе данных?

Ответ №1:

Вы можете перезаписать контроллеры Devise и написать собственную пользовательскую функцию create, чтобы определить, какую модель вызывать для сохранения. Вы можете следовать документации здесь: https://github.com/plataformatec/devise#configuring-controllers

Другой способ, который я могу предложить, заключается в том, что вы просто используете devise controllers и меняете только представление. Поскольку формы одинаковы, вы извлекаете свою форму в частичную, а затем перезаписываете файлы представления devise, чтобы использовать вашу частичную. Вы можете следовать документации здесь, чтобы перезаписать представления devise: https://github.com/plataformatec/devise#configuring-views

Поскольку ваш пользователь и участник очень похожи, вы можете рассмотреть возможность создания подкласса вашего участника от user (или другим способом), чтобы проверка электронной почты была в user, и участник также получит эту проверку. Пользователь и участник могут использовать одну и ту же таблицу.

Для вашей формы входа в систему вы можете использовать ту же форму, но вам нужно направить ее на свой собственный пользовательский контроллер, который затем проверяет 2 модели, а затем возвращает результат. Выполните действия по перезаписи контроллеров devise, как указано выше.