Forum: Ruby on Rails page.replace_html problem.

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Emiliano C. (Guest)
on 2007-06-01 16:22
(Received via mailing list)
Hi all,
I tried to use ajax in a simple eshop application, but the
page.replace_html fail in strange mode.

Controller code:

class mycontroller < ApplicationController
   # Some code

   def login
      # Check user existence in db

      # if the user exist replace the login form with the user menu'
class mycontroller < ApplicationController
   # Some code

   def login
      # Check user existence in db

      # if the user exist replace the login form with the user menu'
      if session[:user] != nil
          create_user_menu
      end
   end

   def create_user_menu
      @user = session[:user]

      render :update do |page|
         page.replace_html "login", :partial => 'user_menu', :locals
=> { :user => @user }
        page.visual_effect :highlight, "login"
      end
   end
end

Layout code:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitiona...

<html>
   <!-- code to build the layout -->

   <div id="login">
       <%= render :partial => 'login' %>
   </div>

   <!-- more code... -->
</html>

The partial _login.rhtml code:

<%= start_form_tag({:action => 'login'}, {:name => 'form_login'}) %>
    <%= render :partial => 'login_form' %>
    <div id="submit_link">
        <%= link_to_function("Login", "document.form_login.submit()")
%>
    </div>
<%= end_form_tag %>

The partial _user_menu.rhtml contain only a simple html table.
When i click on "Login" link, the browser show a new page with
my_controller/login action and the code generted by the js helper,
instead the correct user menu in the page my_controller.
Where is the error?

Thanks in advance, Emiliano.
lanzm (Guest)
on 2007-06-01 16:52
(Received via mailing list)
do you have this line somewhere in your layout header ?

<%= javascript_include_tag :defaults %>

fo the ajax stuff you need prototype and its friends
Thorsten (Guest)
on 2007-06-01 17:00
(Received via mailing list)
You use a normal form to send the login form's content. this launched
a full request cycle and results in a complete page being loaded.
so the browser expects your server to return a complete page, while
your server only returns a bit of javascript and the partial, which
should of course only be done when the request was an AJAX request.

You have to use remote_form_for or form_remote_tag to send the form
data via AJAX.See the API for Documentation.
http://api.rubyonrails.org/classes/ActionView/Help...
http://api.rubyonrails.org/classes/ActionView/Help...
Emiliano C. (Guest)
on 2007-06-01 19:50
(Received via mailing list)
ha scritto:
>
Yes! This is the solution.

Many thanks.
This topic is locked and can not be replied to.