Forum: Ruby on Rails How to render :partials *before* the :action has finished ?

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.
Tom H. (Guest)
on 2009-03-05 23:14
Hi there,

I'm sure a lot of you guys have come across this question:

How can we render several :partials on a page *before* the called
:action has finished?

Basically, my situation is this:

When I click on a certain button, 3 things are supposed to happen:
- INSTANTLY: the button should become disabled (either by setting
":disabled" to "true" by updating the partial or by using
":disable_with")
- INSTANTLY: one or several things should appear on the page (probably
as :partials)
- "IN THE BACKGROUND": sending out 2 emails (which takes too much time
to wait for)

The thing is: it's impossible to do it like below (since "render" always
seems to be executed at the end of an :action):

render :update do |page|
  page.replace_html 'whateverDiv', :partial => 'whateverPartial'
  page.replace_html 'whateverDiv2', :partial => 'whateverPartial2'
end

What's the easiest/best solution in Rails to solve this problem?

Thanks a lot for your help!
Tom
Frederick C. (Guest)
on 2009-03-05 23:45
(Received via mailing list)
On 5 Mar 2009, at 21:14, Tom Ha wrote:

> When I click on a certain button, 3 things are supposed to happen:
> seems to be executed at the end of an :action):
>
> render :update do |page|
>  page.replace_html 'whateverDiv', :partial => 'whateverPartial'
>  page.replace_html 'whateverDiv2', :partial => 'whateverPartial2'
> end
>
The response is only send out when fully finished. If you want
something like this then one option is to push the background task
into something like backgroundrb or bj (so that the action does finish
quickly)

Fred
Andrew P. (Guest)
on 2009-03-06 00:08
(Received via mailing list)
Tom Ha wrote:
> When I click on a certain button, 3 things are supposed to happen:
> - INSTANTLY: the button should become disabled (either by setting
> ":disabled" to "true" by updating the partial or by using
> ":disable_with"
Just add an onclick javascript script event that disables the button -
no need for the server to push this back.
> - INSTANTLY: one or several things should appear on the page (probably
> as :partials)
Serve this from your controller as normal.

> - "IN THE BACKGROUND": sending out 2 emails (which takes too much time
> to wait for)

Add the emails to be sent to a queue table (instantaneous) and have a
background process that routinely generates the emails.
Tom H. (Guest)
on 2009-03-06 00:37
Thanks very much, guys!
This topic is locked and can not be replied to.