# How can I write this is rails (for loop)

**URL:** <https://www.ruby-forum.com/t/how-can-i-write-this-is-rails-for-loop/125627>\
**Category:** Rails\
**Created:** [January 10, 2008, 7:16pm UTC](https://www.ruby-forum.com/t/how-can-i-write-this-is-rails-for-loop/125627 "2008-01-10T19:16:56Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![captaffy](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/f04885/32.png) [@captaffy](https://www.ruby-forum.com/u/captaffy)\
**Post date:** [January 10, 2008, 7:16pm UTC](https://www.ruby-forum.com/t/how-can-i-write-this-is-rails-for-loop/125627/1 "2008-01-10T19:16:56Z")

</div>

I want to write this in rails:

@aux= @rep\_tickets.rp\_parts.size

for i=0, i\< @aux, i++  
@rep.ticket.price=@rep.ticket.price + @rep\_tickets.rp\_part[i].price  
end

---

<div class="post-metadata">

**Author:** ![captaffy](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/f04885/32.png) [@captaffy](https://www.ruby-forum.com/u/captaffy)\
**Post date:** [January 10, 2008, 7:23pm UTC](https://www.ruby-forum.com/t/how-can-i-write-this-is-rails-for-loop/125627/2 "2008-01-10T19:23:55Z")

</div>

John S. wrote:

> I want to write this in rails:
> 
> @aux= @rep\_tickets.rp\_parts.size
> 
> for i=0, i\< @aux, i++  
> @rep.ticket.price=@rep.ticket.price + @rep\_tickets.rp\_part[i].price  
> end

@rep.ticket.price = @rep\_tickets…rp\_parts.map(:&price).sum

---

<div class="post-metadata">

**Author:** ![captaffy](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/f04885/32.png) [@captaffy](https://www.ruby-forum.com/u/captaffy)\
**Post date:** [January 10, 2008, 7:25pm UTC](https://www.ruby-forum.com/t/how-can-i-write-this-is-rails-for-loop/125627/3 "2008-01-10T19:25:07Z")

</div>

Russell McConnachie wrote:

> @rep.ticket.price = @rep\_tickets…rp\_parts.map(:&price).sum

Wow, fat fingered that.

@rep.ticket.price = @rep\_tickets.rp\_parts.map(&:price).sum

---

<div class="post-metadata">

**Author:** ![captaffy](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/f04885/32.png) [@captaffy](https://www.ruby-forum.com/u/captaffy)\
**Post date:** [January 10, 2008, 7:34pm UTC](https://www.ruby-forum.com/t/how-can-i-write-this-is-rails-for-loop/125627/4 "2008-01-10T19:34:50Z")

</div>

Russell McConnachie wrote:

> Russell McConnachie wrote:
> 
> > @rep.ticket.price = @rep\_tickets…rp\_parts.map(:&price).sum
> 
> Wow, fat fingered that.
> 
> @rep.ticket.price = @rep\_tickets.rp\_parts.map(&:price).sum

Doesn’t seem to work:

> > @repair\_ticket.total\_price = @repair\_ticket.rp\_parts.map(:&price).sum  
> > SyntaxError: compile error  
> > (irb):71: syntax error, unexpected tIDENTIFIER, expecting ‘)’  
> > @repair\_ticket.total\_price = @repair\_ticket.rp\_parts.map(:&price).sum

---

<div class="post-metadata">

**Author:** ![captaffy](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/f04885/32.png) [@captaffy](https://www.ruby-forum.com/u/captaffy)\
**Post date:** [January 10, 2008, 7:42pm UTC](https://www.ruby-forum.com/t/how-can-i-write-this-is-rails-for-loop/125627/5 "2008-01-10T19:42:40Z")

</div>

Frederick C. wrote:

> On 10 Jan 2008, at 18:23, Russell McConnachie wrote:
> 
> > > 
> > 
> > @rep.ticket.price = @rep\_tickets…rp\_parts.map(:&price).sum
> 
> or even @rep\_tickets.rp\_parts.sum(:&price)
> 
> (consider also @rep\_tickets.rp\_parts.target.sum(:&price)  
> The difference between the two is that the first will always hit the  
> database (ie it will do select sum(price) from …) whereas the second  
> won’t if rp\_parts has already been loaded (assuming rp\_parts is an  
> active record association)
> 
> Fred

Does not work!  
Repair tickets and rp\_parts are HABTM. Help!

---

<div class="post-metadata">

**Author:** ![captaffy](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/f04885/32.png) [@captaffy](https://www.ruby-forum.com/u/captaffy)\
**Post date:** [January 10, 2008, 7:36pm UTC](https://www.ruby-forum.com/t/how-can-i-write-this-is-rails-for-loop/125627/6 "2008-01-10T19:36:19Z")

</div>

On 10 Jan 2008, at 18:23, Russell McConnachie wrote:

> > 
> 
> @rep.ticket.price = @rep\_tickets…rp\_parts.map(:&price).sum

or even @rep\_tickets.rp\_parts.sum(:&price)

(consider also @rep\_tickets.rp\_parts.target.sum(:&price)  
The difference between the two is that the first will always hit the  
database (ie it will do select sum(price) from …) whereas the second  
won’t if rp\_parts has already been loaded (assuming rp\_parts is an  
active record association)

Fred

---

<div class="post-metadata">

**Author:** ![captaffy](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/f04885/32.png) [@captaffy](https://www.ruby-forum.com/u/captaffy)\
**Post date:** [January 10, 2008, 7:53pm UTC](https://www.ruby-forum.com/t/how-can-i-write-this-is-rails-for-loop/125627/7 "2008-01-10T19:53:16Z")

</div>

On Jan 10, 2008, at 1:34 PM, John S. wrote:

> > > @repair\_ticket.total\_price =  
> > > @repair\_ticket.rp\_parts.map(:&price).sum  
> > > SyntaxError: compile error  
> > > (irb):71: syntax error, unexpected tIDENTIFIER, expecting ‘)’  
> > > @repair\_ticket.total\_price = @repair\_ticket.rp\_parts.map(:&price).sum

.map(&:price)

Note that & causes the following object, if not already a Proc, to be  
sent a .to\_proc method. Rails defines Symbol#to\_proc. Your syntax  
error is because you have transposed the & and : in the line.

-Rob

Rob B. [http://agileconsultingllc.com](http://agileconsultingllc.com)  
removed\_email\_address@domain.invalid
