Rails перенаправить вместо рендера с объектом? - PullRequest
2 голосов
/ 15 февраля 2012

У меня проблема с учебником, которому я следую.Существует часть кода для регистрации, которая, когда проверки не проходят, Rails снова отображает действие.Это все работает хорошо, но, очевидно, URL выглядит не так:

http://localhost:3000/signup - до нажатия кнопки

http://localhost:3000/Users - после нажатия кнопки сневерные данные

Это код:

@user = User.new(params[:user])
if @user.save
flash[:success] = "Welcome to the Sample Application!"
redirect_to @user
else
    render 'new'
end

Есть ли способ передать объект @user с помощью redirect_to, чтобы он отображал правильный URL-адрес и заполняет форму(используя form_for) с данными, введенными @user?

Ответы [ 2 ]

0 голосов
/ 10 января 2014

Нет, по крайней мере, на самом деле, поскольку redirect_to позволяет серверу отвечать HTTP-ответом о перенаправлении, что заставляет клиента получать указанный URL-адрес.Это означает, что соответствующее действие Rails вызывается в новом контексте, что делает невозможным доступ к локальным переменным, таким как объект пользователя.Единственное, что вы можете сделать, это в любом случае сохранить пользователя в базе данных (может быть, в какой-то специальной временной таблице), а затем передать идентификатор в качестве параметра get или сохранить данные в файле cookie и извлечь их в вызываемом действии, чтобы установить значения дляновый пользовательский объект.Однако мне кажется, что оба варианта не стоят того, чтобы иметь правильный URL.

0 голосов
/ 15 февраля 2012

Хорошо, вызов render делает просто сказать, что теперь нужно использовать это частичное. Таким образом, URL-адрес по-прежнему соответствует указанному действию (в данном случае / Users), даже если отображаемое представление отличается.

Вот как вы можете использовать redirect_to:

redirect_to new_user_path(@user)

Вы также можете указывать такие параметры, как:

redirect_to some_path({:data => 1, :var => 2})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...