Victor Rosillo
2006-Jul-21 19:29 UTC
[Rails] Ajax page.replace_html model validation errors
I have the following setup: A model: that validates using helpers like: validates_presence_of, etc.. A view: called ''new'' which renders a partial The partial: _form which has error_messages_for and a form_remote_tag , submit_tag and end_form_tag An action ''create'': that gets executed via the submit_tag in the _form and which in case it can''t save, it renders a rjs template, that replaces the html in the view with the _form so as to present it to the user again along with the associated error messages from the failed validation. The rjs template called ''fixer'' that does: page.replace_htm The problem: If the action ''create'' can''t save because of an error on the validation process, say validates_presence detects an empty field, then the ''create'' action will render the ''fixer'' rjs which has a page.replace_html that replaces the old _form in the view with a new one along with the error messages from the failed validation. So if that happens, I am getting in the view javascript trash and the _form rendered twice. I don''t know why. Here is the code: I have a view called ''new'' that renders a partial definded like this: <%= error_messages_for ''fotografoinfo'' %> <div id="info2"> <%= render (:partial => ''form'') %> </div> the partiall _form has this: <%= error_messages_for ''fotografoinfo'' %> <%= form_remote_tag(:update => "info2", :url => {:controller => ''admin'', :action => ''create''}) %> <p><label for="fotografoinfo_nombre">Nombre</label><br/> <%= text_field ''fotografoinfo'', ''nombre'' %></p> <%= submit_tag "Register" %> <%= end_form_tag %> the ''create'' action in the controller looks like this: def create @fotoinfo = Fotografoinfo.new(params[:fotografoinfo]) if @fotoinfo.save flash[:notice] = ''Fotoinfo was successfully created.'' redirect_to :action => ''list'' else render :action => ''fixer'' end end Then I have a rjs called fixer.rjs with this: page.replace_html ''info2'', :partial => ''form'' Well it is not working, I get the partiall rendered two times into the view ''new'' and there is a lot of javascript text and an error that says: try { Element.update("datos_info2", " 1 error prohibited this fotografoinfo from being saved There were problems with the following fields: * Nombre : Llena la informaci?n \n \n \n\n\n Nombre \n \n\n \n\n\n\n \n \n\n\n"); } catch (e) { alert(''RJS error:\n\n'' + e.toString()); alert (''Element.update(\"info2\", \" 1 error prohibited this fotografofacturainfo from being saved There were problems with the following fields: * Nombre : Llena la informaci?n \n \n \n\n\n Nombre \n \n\n \n \n\n\n\n \n \n\n\n\");''); throw e } please help ------------------------------- Victor Rosillo vrosillo@mac.com