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?
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
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)
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.