Jason Miesionczek
Jason Miesionczek

Reputation: 14448

RoR: Creating/Updating: Showing validation errors while preserving previous values

I have a basic model in which i have specified some of the fields to validate the presence of. in the create action in the controller i do the standard:

@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

however when i redirect to the new form, the errors show, but the fields are empty. is there a way to repopulate the fields with the entered values so the errors can be corrected easily?

Upvotes: 2

Views: 1069

Answers (2)

Grant Hutchins
Grant Hutchins

Reputation: 4418

Capture @obj in the flash hash as well, and then check for it in the new action.

@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

In new:

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

Upvotes: 1

Ryan Bigg
Ryan Bigg

Reputation: 107738

You render :action => :new rather than redirecting.

Upvotes: 5

Related Questions