Если я нахожусь на псевдониме маршрута, таком как регистр/, и у меня есть ошибка формы, и я представляю: новый, для пути действительно ли возможно быть регистром / все еще?
В данный момент это представляет / новый
Я мог сделать redirect_to register_path, но затем я потеряю параметрические усилители?
Это делает следующий тестовый сбой:
Scenario: Try registering with a bad staff number
Given I am on the registration page
When I fill in "email" with "kevin@acme.com"
And I fill in "First Name" with "Kevin"
And I fill in "last name" with "Monk"
And I fill in "Employee Number" with "something barking123"
And I press "Register"
Then I should be on the registration page
And I should see "Your employee ID number looks incorrect."
Rails Way заключается в том, чтобы снова отобразить «новое» (т.е. зарегистрировать) действие, поскольку вы создали объект, форма будет содержать ранее введенные значения, а также сообщения об ошибках. Если вы перенаправляете, вам нужно будет сохранить объект в сеансе или в базе данных, прежде чем выполнять перенаправление. Когда вы отклоняетесь от условностей, всегда хорошо быть уверенным, что вы делаете это по уважительной причине.
Вызов рендеринга из действия будет означать, что URL-адрес останется неизменным по сравнению с get'd или POST'd. Причина, по которой URL-адрес является /new, заключается в том, что 'Register' должен быть POST'ing to /new. Если вы хотите, чтобы эта функция прошла, вы должны изменить «Тогда я должен быть на странице регистрации» на «Тогда я должен быть на новой странице регистрации» и написать соответствующий веб-шаг, на мой взгляд.
На самом деле, это похоже на исправление одной строки в тесте. (Почему вы предпочитаете находиться на странице / register?).
Если это действительно важно, вы также можете временно спрятать параметры в сеансе var.
Если вы действительно этого хотите, вы можете объединить действие «создать» с действием «новое», а действие «обновить» - с действием «редактировать». Затем вам нужно будет проверить тип запроса и обработать его соответствующим образом.
Это достигнет того, о чем вы просите. Кроме того, люди смогут использовать URL-адрес «ошибки» и по-прежнему переходить на действующую страницу. То есть даже после получения ошибки они могут скопировать / вставить URL-адрес, и для него будет действующая страница GET.
При этом, это серьезный взлом, и я не рекомендую вам это делать. Вам придется много работать, а выгода крошечная.
Изменить: пример ..
def new
if request.get?
@user = User.new
elsif request.post?
@user = User.new(params[:user])
if @user.save
redirect_to users_path
else
render :new
end
end
end
Вам также потребуется добавить собственные маршруты.