Сохранение URL-адреса при неудачной отправке формы в Ruby on Rails - PullRequest
4 голосов
/ 16 июля 2011

В настоящее время я пробираюсь по различным учебникам по Rails, но все, похоже, рекомендуют, чтобы при неудачной отправке формы использовался рендер для вывода формы с ошибками.Например, метод создания выглядит следующим образом:

def create
  @user = User.new(params[:user])
  if @user.save
    flash[:success] = "Welcome to the Sample App"
    redirect_to @user
  else
    @title = "Sign up"
    render 'new'
  end
end

Это имеет желаемый эффект, но означает, что если у меня новая пользовательская форма в http://localhost:3000/users/new и возникает ошибка, я получаюта же форма с ошибками на http://localhost:3000/users

Есть ли способ убедиться, что я вместо этого http://localhost:3000/users/new?

Я думал об использовании перенаправления вместо рендера 'new', но это может вызвать проблемы с отображением ошибок формы.Кто-то из Rails IRC указал мне на способ проверки клиентов, но похоже, что это уклоняется от этой проблемы.

Ответы [ 3 ]

2 голосов
/ 16 июля 2011

У меня была похожая проблема с моей формой регистрации пользователя.Так как там я не использую маршруты RESTful, я смог решить его с помощью следующих маршрутов:

resources :users, :except => [:new, :create] do
  ...
end
get  "/signup" => "users#new"
post "/signup" => "users#create"

и в новой форме:

form_for @user, :url => signup_path do ...
1 голос
/ 15 августа 2017

Извините за опоздание (всего на 6 лет) на вечеринку, но почему-то это похоже на проблему с Turbolinks .

См. Эти проблемы здесь и здесь .

1 голос
/ 16 июля 2011

Попробуйте redirect_to :action => 'new' вместо простого рендеринга, это сохранит URL, но информация об ошибках будет потеряна (если вы не введете ее в flash).

Другой вариант - отправить форму по URL-адресу, который используется для ее отображения. В начале действия вы проверяете, есть ли данные, которые нужно обработать. Если обработка идет хорошо, вы redirect_to где-то еще, в противном случае вы ничего не делаете - форма отображается вместе со всеми ошибками. Это, я полагаю, не очень Railsy, ​​но оно должно работать, как вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...