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

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 ?!

VIEW:

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

CONTROLLER

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

Thank you very much for any help!
Tom

Your code seems right.
But in case that I havn’t used submit_to_remote, so I cannot tell you
what you are missing.
Did you use debug to see whether your XMLHttpRequest call can ge
caught by the ‘new’ action in controller?

However I can tell you that using form_remote_tag or defining a
button_to_remote using remote_function by yourself can do the trick.

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.

VIEW:

<% 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.

CONTROLLER

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

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 -%>

By:

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

…and it works fine! Thanks!
Tom