2008-10-01 2 views
2

У меня есть базовая модель, в которой я указал некоторые поля для проверки наличия. в действии создать в контроллере я сделать стандарт:RoR: Создание/обновление: отображение ошибок проверки при сохранении предыдущих значений

@obj = SomeObject.new(params[:some_obj]) 

if @obj.save 
    flash[:notice] = "ok" 
    redirect... 
else 
    flash[:error] = @obj.errors.full_messages.collect { |msg| msg + "<br/>" } 
    redirect to new form 
end 

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

ответ

5

Вы, render :action => :new, а не перенаправляете.

+0

Причина это так, что вы держите объект в памяти, а не создавать новый объект; перенаправление запускает совершенно новый запрос. – 2008-10-01 19:15:58

1

Захват @obj во флэш-хеше также, а затем проверьте его в действии new.

@obj = SomeObject.new(params[:some_obj]) 

if @obj.save 
    flash[:notice] = "ok" 
    # success 
else 
    flash[:error] = @obj.errors.full_messages.collect { |msg| msg + "<br/>" } 
    flash[:obj] = @obj 
    # redirect to new form 
end 

В new:

@obj = flash[:obj] || MyClass.new 
Смежные вопросы