это мой первый вопрос здесь, и в настоящее время я пытаюсь создать свое первое приложение Ruby on Rails, поэтому этот вопрос может быть базовым.
Проблема:
Мне нужна форма на корневом сайте, которая состоит только из двух полей: адрес электронной почты и пароль для модели пользователя. В зависимости от того, существует ли уже введенный адрес электронной почты, форма должна переслать запрос «users # create» (т. Е. Создать нового пользователя) или «session # create» (т. Е. Зарегистрировать пользователя в .. если пароль правильный)
Что я пробовал:
Чтобы решить эту проблему, я создал новое действие в контроллере страниц под названием «решить» и указал форму на этой странице.
В основном это выглядит так:
def decide
if User.find_by_email(params[:email])
# Copied in all of the code from sessions#create
# with a redirect at the end so a /decide page doesn't get rendered
else
# Copied in all of the code from users#create
# with a redirect at the end so a /decide page doesn't get rendered
end
end
-
Теперь это работает, и я очень горжусь собой, что понял это как новичка, но я слышу, как опытные программисты в агонии кричат об этом коде. Я уверен, что это не «Путь Рельсов».
Я повторяю большое количество кода и чувствую, что помещаю в контроллер что-то, что не было сделано для этой цели.
Другая проблема заключается в том, что я не могу заставить работать мой интеграционный тест rspec, который в основном идет к root_path, заполняет форму новым пользователем, нажимает кнопку и ожидает успешного завершения ... но тест получает вернул пустой HTML-документ при нажатии кнопки. Хотя он прекрасно работает, когда я делаю то же самое в браузере.
Итак, я понял:
Не могли бы вы как-то поместить вышеприведенный оператор if в файле rout.rb и перенаправить запрос на соответствующий контроллер и действие?
Если так, то как?
Или у кого-то есть другая идея, как этого добиться?
Спасибо,
-Konstantin