Это два пользователя:
Пользователь - зарегистрированный пользователь
Гость - не авторизованный посетитель.
Пользователь и гость могут задать вопрос. Чтобы оставить вопрос, гость должен указать свой адрес электронной почты.
Это два представления "new.html.erb" и "new_for_guest.html.erb". Первый использует переменную @user. Второй нет.
Когда вопрос, созданный гостем, не проходит проверку, необходимо отобразить «new_for_guest.html.erb», сохраняя все введенные данные .
Код следующий:
def new
@question = Question.new
guest = session[user_id].nil?
respond_to do |format|
if guest
format.html { render "new_for_guest" }
else
format.html { render "new" }
end
end
end
def create
@question = Question.new(params[:question])
guest = session[user_id].nil?
respond_to do |format|
if @question.save
flash[:notice] = 'Question was successfully created.'
format.html { redirect_to(@question) }
else
if guest
format.html { render :action => "new_for_guest" } # problem
else
format.html { render :action => "new" }
end
end
end
Когда проверка гостя заканчивается неудачей и отображается представление "new_for_guest", я вижу в браузере URL "/ questions" вместо "/ questions / new". Из-за этого все таблицы стилей, используемые для «новых» действий, исчезли.
Когда для пользователя происходит сбой проверки и отображается "новый" вид, я вижу правильный URL "/ questions / new" и все в порядке.
Когда я просто говорю
format.html{ redirect_to new_question }
Будет выполнено «новое» действие, но все введенные пользователем данные исчезли.
Мне нужно отобразить представление "new_for_guest" в контексте "Вопросы / Новый".
Как это сделать?
Обновление
Я заметил то же поведение нетронутого кода, сгенерированного скаффолдом.
Когда при создании проверки не удается, новое действие отображается снова, но в URL вместо "/questions/new".
отображается" / questions "
Это странно. Это правильное поведение?
Я нашел похожий вопрос без ответа Действие Rails create перенаправляет на индекс, когда оно должно отображать новое действие