Forum: Ruby on Rails page.replace_html : How to update a DIV using a button

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.
460ead051b49c0b2a8e45e46252d4bda?d=identicon&s=25 Tom Ha (tom)
on 2008-10-29 23:36
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
D22781eccd92073acd6a1ed350c3d136?d=identicon&s=25 boblu (Guest)
on 2008-10-30 00:56
(Received via mailing list)
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.
2b891e820c238ded365d035771603f21?d=identicon&s=25 Bill Walton (Guest)
on 2008-10-30 01:31
(Received via mailing list)
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 <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
460ead051b49c0b2a8e45e46252d4bda?d=identicon&s=25 Tom Ha (tom)
on 2008-10-30 08:25
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
This topic is locked and can not be replied to.