# Yields and blocks in Rails

**URL:** <https://www.ruby-forum.com/t/yields-and-blocks-in-rails/136976>\
**Category:** Rails\
**Created:** [May 7, 2008, 9:38pm UTC](https://www.ruby-forum.com/t/yields-and-blocks-in-rails/136976 "2008-05-07T21:38:19Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![casper\_the\_ghost](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/58956e/32.png) [@casper\_the\_ghost](https://www.ruby-forum.com/u/casper_the_ghost)\
**Post date:** [May 7, 2008, 9:38pm UTC](https://www.ruby-forum.com/t/yields-and-blocks-in-rails/136976/1 "2008-05-07T21:38:19Z")

</div>

The below code works just fine in Ruby but I get a LocalJumpError in  
Rails stating “no block given”. I thought I knew what a block was, but  
given the results, I am not so sure. Could someone please offer an  
explanation as to what is going on?

Thanks,  
C.

class Array  
def comb(n = size)  
if size \< n or n \< 0  
elsif n == 0  
yield([])  
else  
self[1…-1].comb(n) do |x|  
yield(x)  
end  
self[1…-1].comb(n - 1) do |x|  
yield([first] + x)  
end  
end  
end  
end

---

<div class="post-metadata">

**Author:** ![casper\_the\_ghost](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/58956e/32.png) [@casper\_the\_ghost](https://www.ruby-forum.com/u/casper_the_ghost)\
**Post date:** [May 7, 2008, 11:10pm UTC](https://www.ruby-forum.com/t/yields-and-blocks-in-rails/136976/2 "2008-05-07T23:10:18Z")

</div>

HI –

On Wed, 7 May 2008, Charles wrote:

> class Array  
> end  
> end  
> end  
> end

Can you send a case where you’re calling it and it’s giving you that  
error?

David

–  
Rails training from David A. Black and Ruby Power and Light:  
INTRO TO RAILS June 9-12 Berlin  
ADVANCING WITH RAILS June 16-19 Berlin  
INTRO TO RAILS June 24-27 London (Skills Matter)  
See [http://www.rubypal.com](http://www.rubypal.com) for details and updates!

---

<div class="post-metadata">

**Author:** ![casper\_the\_ghost](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/58956e/32.png) [@casper\_the\_ghost](https://www.ruby-forum.com/u/casper_the_ghost)\
**Post date:** [May 8, 2008, 6:35am UTC](https://www.ruby-forum.com/t/yields-and-blocks-in-rails/136976/3 "2008-05-08T06:35:08Z")

</div>

I was trying to run it in some controller code. I gave up trying to do  
anything fancy and just focused on getting something simple to run.  
The exception name in the header is LocalJumpError, and the error  
message in the box is “no block given”. I placed the array extension  
as the first thing in the controller file before the controller class.  
I call the sample below from within a method in the controller class.

[‘a’,‘b’,‘c’,‘d’].comb(3).each do |element|  
puts element  
end

here is where it points to the errors:  
app/controllers/courses\_controller.rb:11:in `comb' app/controllers/courses_controller.rb:11:in`comb’  
app/controllers/courses\_controller.rb:5:in `comb' app/controllers/courses_controller.rb:10:in`comb’

Because it is the first thing in the file, the line numbers will add  
up with the previous code example. They point to the yields.

thanks,  
C.

---

<div class="post-metadata">

**Author:** ![casper\_the\_ghost](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/58956e/32.png) [@casper\_the\_ghost](https://www.ruby-forum.com/u/casper_the_ghost)\
**Post date:** [May 8, 2008, 3:40pm UTC](https://www.ruby-forum.com/t/yields-and-blocks-in-rails/136976/4 "2008-05-08T15:40:45Z")

</div>

Thanks for the eyes 🙂  
with the array output, i was tacking on a .each without even thinking  
about it. Comparing the ruby code, i completely glossed over  
the .each .

I appreciate it!

C.

---

<div class="post-metadata">

**Author:** ![casper\_the\_ghost](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/58956e/32.png) [@casper\_the\_ghost](https://www.ruby-forum.com/u/casper_the_ghost)\
**Post date:** [May 8, 2008, 9:54am UTC](https://www.ruby-forum.com/t/yields-and-blocks-in-rails/136976/5 "2008-05-08T09:54:31Z")

</div>

Charles wrote:

> [‘a’,‘b’,‘c’,‘d’].comb(3).each do |element|  
> puts element  
> end

You should get a LocalJumpError with this code in Ruby, too. Remove the  
“.each” and it should be ok.
