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

이 뒤에 그 이유는 당신이 아니라 새로운 객체를 생성하는 것보다 메모리에서 개체를 유지하는 것이 매우이다; 리디렉션은 완전히 새로운 요청을 시작합니다. –

+0

단점은 SomeObject를 생성하기위한 양식에 두 개의 URL이 있습니다 : /some_objects/첫 번째 양식의 새 # 그래도 그다지 할 수는 없지만. –

+0

좋은 포인트 Ian & Gauis –

1

플래시 해시로도 @obj을 캡처 한 다음 new 동작에서 확인하십시오. 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 

:

@obj = flash[:obj] || MyClass.new