How to maintain Form State between Postback ?

Hi all,

I've trying to look for answers for my problem but so far couldn't find one, hopefully you can tell me what to do. This problem is so ubiquitous to Web Development, pertaining the fact that the web is stateless, i.e. how to maintain form's state between postback. Basically, I have a form with some validations run for some of the fields, whenever the user submit the form and the one of the validations failed, the page will reload with the error message shown. The problem is, all the fields, that were previously filled-in are all empty again, which means the user would have to enter all the information all over again. This is obviously not ideal scenario from the user interaction point of view.

Now, is there anything in Rails that can help me to maintain the state automatically ? Have I missed anything ?

Thanks for your help, Chris

The standard pattern if that upon validation failing you don't redirect, you just render the form for the creation/editing action.

Fred

The standard pattern if that upon validation failing you don't redirect, you just render the form for the creation/editing action.

Fred

And this will maintain the state of the fields ? How ? Edit will need an existing data, which is not the case here.

Thanks

I think I understand this now.

Thanks for the help

You've found the answer evidentially (I'm afraid to ask what it was), but to all the others that ask questions like this, _please_ (please!) get a Rails book or tutorial and work through an example so you can get at least a minimal understanding of how the framework is supposed to be used.

> Now, is there anything in Rails that can help me to maintain the state > automatically ? Have I missed anything ?

You've found the answer evidentially (I'm afraid to ask what it was), but to all the others that ask questions like this, _please_ (please!) get a Rails book or tutorial and work through an example so you can get at least a minimal understanding of how the framework is supposed to be used.

I know you mean well, Bob, but let's extend the leash a little. Even people who've read books and tutorials can have basic questions some times. That's okay. It's time to intervene if a person is constantly blasting the mailing list with question after question that could all be answered with a minimum of due diligence, but asking for help a few times shouldn't be a crime.

Bob,

Just to say that I do have the book and read it. But what I'm doing at the moment is a bit more complicated than the example in the book. Normally I wouldn't ask this kind of question, because the framework should work the way it does without much intervention. This time I have to two models on the same form, and I am also doing custom validation outside the Model.

Infact, even now that I understand about the postback pattern, my View is 'still' not loading the form's data to the field on postback. Maybe that means I still don't understand then, who knows.

Cheers, Chris

Sorry, didn't mean to imply it was a crime.

Bob,

Just to say that I do have the book and read it. But what I'm doing at the moment is a bit more complicated than the example in the book. Normally I wouldn't ask this kind of question, because the framework should work the way it does without much intervention. This time I have to two models on the same form, and I am also doing custom validation outside the Model.

Sorry, didn't mean to insult you. None of that info was in the OP.

Infact, even now that I understand about the postback pattern, my View is 'still' not loading the form's data to the field on postback. Maybe that means I still don't understand then, who knows.

Well, without seeing any code, I don't know how anyone can help beyond just guessing...

Cheers.

Hi All

I just popped into the forum looking for precisely the same thing as Mahadewa. I do have a few books and I'm working my way through them, but if anyone can point me in the right direction with a link or a quick paste of code I would be very grateful.

Thanks Gavin

Here is my controller's code:

Ok, I found a solution. I don't know if this is the best one, but it works for me. I'm sure somebody will be able to come up with a better solution.

So, here is what I did.

In my View I put, for example:

<%= text_field :invite, :invite_code, :value => @code, :class => 'input_text' %>

The important part is the hash :value => @code

and then in my controller, I put:

@code = params[:invite][:invite_code]

This will persist the value of the above field on postback.

Hope this helps, Chris

Hi mahadewa,

Validations are usually better off in the model than the controller.

For the sake of understanding what's going on, however, the form elements are prepopulated with your model data when you use the form builder methods in your views. For example, when you do:

  <%= f.text_field :last_name, ... %>

It will generate an HTML tag with the value attribute set to @user.last_name. I'm guessing that it just wasn't prepopulated when one of those controller validations before the @user = ... line failed. Since you `return'ed from your controller action, @user was left unset, and the view had nothing to prepopulate from. If you move the @user = ... line to before the validations, it'd probably work.

But again, validations are usually best done in the model.

Regards, George.

I have to interject here, sorry this is such an old post but no one has solved this in a manner satisfying for me so I did something about it. Form state still remains an issue across all platforms.

I just released a jQuery plugin running off of HTML 5 offline storage and it works in all the major browsers to maintain your form state, just drop one line of code and you can do it based on a browser session or persist it across sessions with no server-side programming needed or cookies. It can even work on an HTML page. I have done development for PHP, .NET, Ruby, Python and JSP so I tend to see JavaScript as a godsend and a preferable solution because I can reuse it everywhere. HTML 5 rocks.

I'm not making money off of this as its 100% free but I feel that its my duty to let people know.

Here is the plugin link -> http://www.jasonsebring.com/dumbFormState