page.replace_html : How to update a DIV using a button

Hi Tom,

Tom Ha wrote:

I have this button which is supposed to update a DIV on the same page (using a partial). But it doesn't.

What am I missing here ?!

Do you have Firebug installed? If not, you definitely need to get that. The console tab is invaluable in debugging Ajax.


<% form_tag '/trees' do -%>   <%= submit_to_remote 'new_tree', 'Add a tree', :url => { :controller => 'trees', :action => 'new' } %> <% end -%>

This is interesting. I'm not sure what the impact would be of mixing form_tag, which includes the url ('/trees'), with submit_to_remote, which also includes a url. Especially since they're different urls in your case (a POST to trees is going to naturally invoke the 'create' action, not the 'new' action. You might try just using form_remote_tag instead.


  def new     render :update do |page|       page.replace_html 'newtree', :partial => 'user/trees/newtree'

You didn't show it, so I'll assume you have a <div id="newtree"> element on the page, and that you have a newtree.rhtml file in views/user/trees/. If either of those is not true, your Ajax definitely won't work.

Bottom line, though, is get Firebug installed in FireFox and see what it's telling you.

HTH, Bill

Thanks for your hints!

In this case Firebug didn't throw any error.

Sp I replaced:

<% form_tag '/trees' do -%>   <%= submit_to_remote 'new_tree', 'Add a tree', :url => { :controller => 'trees', :action => 'new' } %> <% end -%>


<%= button_to_function 'Add a tree' do |page| page.replace_html 'newtree', :partial => 'user/trees/newtree' end %>

...and it works fine! Thanks! Tom