Ruby on Rails при сбое метода create, рендеринг теряет локальные переменные - PullRequest
2 голосов
/ 16 июня 2010

Привет, ребята, у меня есть простой метод создания с некоторыми проверками, и всякий раз, когда метод создания завершается ошибкой из-за ошибок проверки, он повторно отображает «новое» действие.

Проблема в моем новом действии / представлении Iиметь локальную переменную, которая устанавливается в действии и передается в частичную часть для отображения некоторой связанной информации о том, что создает пользователь.

Теперь, когда мое действие создания завершается неудачно, и я пытаюсь повторно отобразить «новый»action Я получаю всегда удивительную

undefined method `cover' for nil:NilClass

ошибку.

Какой лучший способ справиться с восстановлением локальных переменных моего действия на рендере вместо повторного перенаправления на действие ипользователь теряет введенные данные?

Для уточнения.Вот пример кода:

#controller.rb
def new
  @summary = User.find(params[:user_id])
  @page = Page.new
end

def create
  @page = Page.new(params[:page])
  if @page.save
    redirect_to @page
  else
    render :action => 'new'
  end
end

в моем файле new.html.erb у меня есть что-то вроде этого

<%= @summary.cover %>
#page form etc...

1 Ответ

8 голосов
/ 16 июня 2010

Когда вы создаете объект и пытаетесь сохранить его, объект все еще содержит значения и ошибки проверки, поэтому передайте его в рендер. Обычно он называется так же, как и в вашем новом методе, так что шаблон просто работает.

if @my_object.save
  flash[:notice] = "Successfully created."
  redirect_to ....
else
  render :action => 'new'  #assuming new.html.erb uses @my_object
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...