#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
либо как amember
, но не оба? Или вы хотите, чтобы один человек мог зарегистрироваться как auser
и как amember
, но вы просто не хотите дважды сохранять их электронную почту в базе данных?
Ответ №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, как указано выше.