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


#1

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


#2

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.


#3

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


#4

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