Hey guys,
How do you stop Ruby code from executing? For example,
def newaction
puts “1”
return
puts “2”
end
I tried return in the example above, but it continues and than looks for
newaction.rhtml. How do I stop it completely dead in its tracks?
Eric G. wrote:
Hey guys,
How do you stop Ruby code from executing? For example,
def newaction
puts “1”
return
puts “2”
end
I tried return in the example above, but it continues and than looks for
newaction.rhtml. How do I stop it completely dead in its tracks?
I just tried this and it works just fine:
def test
render :text => ‘foo’
return
fail ‘this should raise an error’
end
If you comment out the “return” an error will be raised from the “fail”
method. It looks right your doing it the right way.
Just remember that puts in your controller does not write anything to
your rendered HTML you see in the browser.
On Friday, July 28, 2006, at 12:18 AM, Alex W. wrote:
end
Rails mailing list
[email protected]
http://lists.rubyonrails.org/mailman/listinfo/rails
Rails overrides does some default processing when an action returns.
One of those things is to render the default view unless a render has
been called. So unless you redirect, it will fall through to the view.
_Kevin
www.sciwerks.com
Hey,
I tried out your code. That doesnt give me the desired result.
I just want the focus to return to the current page. If I have
def tester
end
I dont want it to go to tester.rhtml or redirect to a different page. I
just want it to completely halt or stop and return to the page with
nothing changed on the page. “Return” doesn’t work for this and neither
does render :nothing => true.
Is there anyway to stop Ruby code. It just seems like such an important
feature…
Eric G. wrote:
Hey,
I tried out your code. That doesnt give me the desired result.
I just want the focus to return to the current page. If I have
def tester
end
I dont want it to go to tester.rhtml or redirect to a different page. I
just want it to completely halt or stop and return to the page with
nothing changed on the page. “Return” doesn’t work for this and neither
does render :nothing => true.
Is there anyway to stop Ruby code. It just seems like such an important
feature…
Oh, return wont work in that case because it simply halts execution of
the current method. Not the entire rails app.
You just just abort in this way becuase the browser has already
requested the new page. At this point you have to do a “redirect_to”
back to the page you just came form.
if I redirect back to the page we came from, then all the info that was
there will be deleted on the screen refresh. So basically there is no
way to stop the ruby execution. That seems kinda weird…
Oh, return wont work in that case because it simply halts execution of
the current method. Not the entire rails app.
You just just abort in this way becuase the browser has already
requested the new page. At this point you have to do a “redirect_to”
back to the page you just came form.
Eric G. wrote:
if I redirect back to the page we came from, then all the info that was
there will be deleted on the screen refresh. So basically there is no
way to stop the ruby execution. That seems kinda weird…
Oh, return wont work in that case because it simply halts execution of
the current method. Not the entire rails app.
You just just abort in this way becuase the browser has already
requested the new page. At this point you have to do a “redirect_to”
back to the page you just came form.
The problem is the browser, not ruby or rails. Think fo the following
conversation between browser and server:
Browser: get me the page ‘/post/edit/1’
Server: here you go: <html…>
Browser: ok, show the page ‘/post/update/1’ with the attached form data
Server: (halts mid process) here’s a blank page
Browser: ok, guess I’ll show this blank page.
The way to do what you want is either via ajax, or how the standard
scaffold handles it by stuff the form data into a variable, and then
redisplaying the same form with it so the fields have the proper values.
Eric G. wrote:
I suggest that you capture the form post and pass it to the page that
you redirect to.
You could also save it in the session and just display the data from the
form.
Jason
On 27-Jul-06, at 4:11 PM, Alex W. wrote:
You just just abort in this way becuase the browser has already
data
Server: (halts mid process) here’s a blank page
Browser: ok, guess I’ll show this blank page.
The way to do what you want is either via ajax, or how the standard
scaffold handles it by stuff the form data into a variable, and then
redisplaying the same form with it so the fields have the proper
values.
While I question the usability of “just halting” as though the user
didn’t click a link or press a button (no feedback, which is bad), it
is possible to do this without redirects or ajax.
If you take a look at the HTTP spec you’ll see that the http response
codes of 204 and 205 tell the browser not to expect new content in
the response.
So, in your controller you do:
return render(:nothing => true, :status => 204)
Hope this helps,
Trevor
Trevor S.
http://somethinglearned.com
Hey Trevor,
Do you happen to know how I could throw up a popup window, before the
return render command? It could be javascript or whatever.
Eric
Trevor,
That works like a charm!!! Thanks you so much!
Eric
you can do:
def test
@show_prompt_window = true
return
@show_prompt_window = false
end
then have it fall to an foo.rjs
and in foo.rjs
if @show_prompt_window
use some js magic
else
render a partial
cheers
Eric G. wrote:
Hey Trevor,
Do you happen to know how I could throw up a popup window, before the
return render command? It could be javascript or whatever.
Eric
Ok, Im a little new do rjs, do basically I have
def test
return render(:nothing => true, :status => 204)
end
Where return render(:nothing => true, :status => 204) returns me to the
window with nothing done. How should I modify that to access and rjs
file?
Erich wrote:
you can do:
def test
@show_prompt_window = true
return
@show_prompt_window = false
end
then have it fall to an foo.rjs
and in foo.rjs
if @show_prompt_window
use some js magic
else
render a partial
cheers
Eric G. wrote:
Hey Trevor,
Do you happen to know how I could throw up a popup window, before the
return render command? It could be javascript or whatever.
Eric
Ok, Im a little new do rjs, so basically I have
def test
return render(:nothing => true, :status => 204)
end
Where return render(:nothing => true, :status => 204) returns me to the
window with nothing done. How should I modify that to access and rjs
file?
Erich wrote:
you can do:
def test
@show_prompt_window = true
return
@show_prompt_window = false
end
then have it fall to an foo.rjs
and in foo.rjs
if @show_prompt_window
use some js magic
else
render a partial
cheers
Eric G. wrote:
Hey Trevor,
Do you happen to know how I could throw up a popup window, before the
return render command? It could be javascript or whatever.
Eric
I think you will have to remove the render (:nothing …) . YOu want it
to fall to the rjs file. prepend your current rhtml file with an _.
Then just use the logic i described. call the partial (the file with
the _) if you want a normal view or if you rather have the page display
some prompt window, use some js magic for that
Eric G. wrote:
Ok, Im a little new do rjs, so basically I have
def test
return render(:nothing => true, :status => 204)
end
Where return render(:nothing => true, :status => 204) returns me to the
window with nothing done. How should I modify that to access and rjs
file?
Erich wrote:
you can do:
def test
@show_prompt_window = true
return
@show_prompt_window = false
end
then have it fall to an foo.rjs
and in foo.rjs
if @show_prompt_window
use some js magic
else
render a partial
cheers
Eric G. wrote:
Hey Trevor,
Do you happen to know how I could throw up a popup window, before the
return render command? It could be javascript or whatever.
Eric
On Friday, July 28, 2006, at 12:58 AM, Eric G. wrote:
I dont want it to go to tester.rhtml or redirect to a different page. I
Rails mailing list
[email protected]
http://lists.rubyonrails.org/mailman/listinfo/rails
try…
def action
redirect_to :back
end
_Kevin
www.sciwerks.com
On 27-Jul-06, at 7:08 PM, Eric G. wrote:
Hey Trevor,
Do you happen to know how I could throw up a popup window, before the
return render command? It could be javascript or whatever.
Aha!
so you actually do want some user feedback (rather than just stop
processing and do nothing) then…
Okay, if what you want is to have the browser pop up a window in
response to the user click every time they click, then it’s just a
case of adding an onclick=“alert(‘I am going to talk to the server
now!!!’)” sort of thing to your link/button.
However, if your controller’s action will decide whether or not to
popup for a given request then you’re getting into the realms of ajax
and the like - and you aren’t actually simply halting processing of
an action. Which means that the advice other people gave about
redirects and ajax are more relevant to your needs.
In that case I’d suggest you lock yourself into a room a read some
ajax tutorials, as well as the ajax sections of the AWDR book and the
ajax related recipes from the Rails Recipes book. You need to have a
grounding in how things are supposed to work before the question/
answer banter of a mailing list will be effective for you.
HTH,
Trevor